HtmlHelper.Display()& DisplayFor()无法按模型的预期工作

时间:2013-10-28 13:13:37

标签: asp.net-mvc

我有一个使用以下行编辑客户端的视图:

@Html.DisplayFor(x=>x.Orders)

在里面。但输出Id属性的显示,忽略其他属性:

public class Order
{
    public int Id { get; set; }

    [DisplayName("Order Header")]
    public string Header { get; set; }

    // ... etc...

}

虽然我希望行为是:

  

如果对象包含多个属性,则对于每个属性,该方法都会生成一个字符串,该字符串包含属性名称的标记和属性值的标记。 MSDN

我错过了什么?

观点:

@model Models.Client

@{
    ViewBag.Title = "Client Details";
}
<h2>@ViewBag.Title</h2>

<fieldset>
  @Html.DisplayFor(x => x.Notes, "ListOfNotes")
</fieldset>
<fieldset>
  @{ Html.RenderPartial("NewNoteForm", Model); }
</fieldset>

<fieldset>
  @using(@Html.BeginForm())
  {
    @Html.EditorForModel()
    <input type="submit" value="Save"/>
  }
</fieldset>

<fieldset>
  @Html.DisplayFor(x => x.Orders) @* The errant bit *@
</fieldset>

<fieldset>
  @{ Html.RenderPartial("NewOrderForm", Model); }
</fieldset>

客户端模型:

public class Client
{
    public Client(int PId, string title, string forename, string surname)
        : this()
    {
        PId = pId;
        Title = title;
        Forename = forename;
        Surname = surname;
    }

    public Client()
    {
        Notes = new List<Note>();
        Orders= new List<Order>();
    }

    public int PId { get; set; }

    public string Title { get; set; }
    public string Forename { get; set; }
    public string Surname { get; set; }
    public List<Note> Notes { get; private set; }
    public List<Order> Orders { get; private set; }
}

顺便说一下,笔记列表按预期显示。

2 个答案:

答案 0 :(得分:1)

使用Html.DisplayForModel(o=>o)
或致电Html.DisplayFor()
为您当前型号的每个属性。这样的事情。

@Html.DisplayFor(model=>model.Id)
@Html.DisplayFor(model=>model.Header)

答案 1 :(得分:0)

由于Orders是一个列表,因此需要一个循环来显示该列表中的所有项目,如下所示:

<table>
    <thead>
        <tr>
            <th>@Html.DisplayName(m => m.Title)</th>
            <th>@Html.DisplayName(m => m.Orders)</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>@Html.DisplayFor(m => m.Title)</td>
            <td>
                @foreach (var order in Model.Orders)
                {
                    <div>
                        @Html.DisplayFor(_ => order)
                    </div>
                }
            </td>
        </tr>
    </tbody>
</table>

引号:

  

如果对象包含多个属性...

是指order对象的属性(IdHeader)应该使用那一行@Html.DisplayFor(_ => order)一次全部显示。