0

我正在尝试将一些属性传递给查看,但我得到了错误的视图。这是模型

public class ModuleDetails {
    public long Id { get; set; }
    public string ModuleId { get; set; }
    public string TypeName { get; set; }
    public string KindName { get; set; }
    public IEnumerable<Property> Properties { get; set; }
}

public class Property {
    public string Name { get; set; }
    public string Value { get; set; }
}

这是我在控制器中所做的:

public ActionResult Details(long id) {
    var ownerId = _dbSis.OwnedModules.Find(id);
    var ownerName = _dbSis.Set<BusinessUnit>().Find(ownerId.ModuleOwnerId);

    var module = (_dbSis.Modules.Select(m => new ModuleDetails {
        Id = id,
        ModuleId = m.ModuleId,
        TypeName = m.ModuleType.TypeName,
        KindName = m.ModuleType.ModuleKind.KindName,
        Properties = m.PropertyConfiguration.PropertyInstances.Select(
        x => new Property {Name = x.Property.Name, Value = x.Value})
    }));

    return View(module.FirstOrDefault());//am i doing something wrong here?
}

视图

@using BootstrapSupport
@model AdminPortal.Areas.Hardware.Models.ModuleDetails
@{
    ViewBag.Title = "Details";
    Layout = "~/Views/shared/_BootstrapLayout.basic.cshtml";
}

<fieldset>
    <legend>Module <small>Details</small></legend>
    <dl class="dl-horizontal"> <!-- use this class on the dl if you want horizontal styling http://twitter.github.com/bootstrap/base-css.html#typography  class="dl-horizontal"-->     

        <dt>ID</dt>
        <dd>@Model.Id</dd>

        <dt>Module ID</dt>
        <dd>@Model.ModuleId</dd>

        <dt>Module Type</dt>
        <dd>@Model.TypeName</dd>

        <dt>Module Kind</dt>
        <dd>@Model.KindName</dd>
        @foreach (var properties in Model.Properties)
        {
            <dt>Property Names</dt>
            <dd>@properties.Name</dd>
            <dt>Property Value</dt>
            <dd>@properties.Value\</dd>
        }       
    </dl>
</fieldset>
<p>
    @Html.ActionLink("Edit", "Edit", Model.GetIdValue()) |
    @Html.ActionLink("Back to List", "ModuleList")
</p>

现在,当我运行程序并在控制器的操作中设置断点时,我得到了这个 在此处输入图像描述

我可以看到属性中有一些名称和值。但在视图中,无论我选择哪个项目,我总是得到第一个项目的详细信息,但 ID 是 Id 是我选择的 Id。是不是因为我在做

return View(module.FirstOrDefault());

如何将正确的项目及其属性传递给 View?

4

3 回答 3

1

如果要显示具有 Id = some id 的正确项目,则需要按 Id 选择记录。在您的代码中,将 where 子句添加到您的 linq select 语句中,它可能是...

  var module = (SbSis.Modules.Where(t => t.ID == id).Select( ....
于 2013-07-02T09:13:51.793 回答
0

如果你想根据返回元素,id你可以用这个过滤:module.FirstOrDefault(x=> x.Id == id)

于 2013-07-02T09:17:47.047 回答
0

也许.FirstOrDefault()方法的结果是默认的。这意味着您获得了多个对象,但您的视图具有对象模型,而不是 IEnumerable。请替换您的代码如下进行测试

return View(module.FirstOrDefault());

return View(module.First());

如果在此之后您不会收到错误,则表示我是真的。

于 2013-07-02T09:29:04.380 回答