我有一个使用以下行编辑客户端的视图:
@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; }
}
顺便说一下,笔记列表按预期显示。
答案 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
对象的属性(Id
和Header
)应该使用那一行@Html.DisplayFor(_ => order)
一次全部显示。