Nat*_*Pet 75 asp.net-mvc razor
我听说在视图中使用@foreach是禁忌.意思是,视图中不应该有任何逻辑.什么是@foreach逻辑应该在哪里的最佳实践?
@foreach..
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 152
什么是@foreach逻辑应该在哪里的最佳实践?
无处,只是摆脱它.您可以使用编辑器或显示模板.
例如:
@foreach (var item in Model.Foos)
{
<div>@item.Bar</div>
}
Run Code Online (Sandbox Code Playgroud)
完全可以被显示模板取代:
@Html.DisplayFor(x => x.Foos)
Run Code Online (Sandbox Code Playgroud)
然后您将定义相应的显示模板(如果您不喜欢默认模板).因此,您将定义一个可重用的模板~/Views/Shared/DisplayTemplates/Foo.cshtml,该模板将由框架为Foos集合的每个元素自动呈现(IEnumerable<Foo> Foos { get; set; }):
@model Foo
<div>@Model.Bar</div>
Run Code Online (Sandbox Code Playgroud)
显然,完全相同的约定适用于编辑器模板,如果您想要显示一些输入字段,允许您编辑视图模型,而不是仅显示为只读,则应使用这些模板.
Jon*_*noW 90
当人们说不在视图中放置逻辑时,它们通常指的是业务逻辑,而不是渲染逻辑.在我的拙见中,我认为在视图中使用@foreach是完全没问题的.
Mih*_*abo 12
我在@foreach发送包含实体列表的实体时使用(例如在1个视图中显示2个网格)
例如,如果我作为模型发送包含Foo1(List<Foo1>)和的实体FooFoo2(List<Foo2>)
我可以参考第一个List:
@foreach (var item in Model.Foo.Foo1)
{
@Html.DisplayFor(modelItem=> item.fooName)
}
Run Code Online (Sandbox Code Playgroud)
对于我在剃须刀视图中使用foreach的情况回复@DarinDimitrov.
<li><label for="category">Category</label>
<select id="category">
<option value="0">All</option>
@foreach(Category c in Model.Categories)
{
<option title="@c.Description" value="@c.CategoryID">@c.Name</option>
}
</select>
</li>
Run Code Online (Sandbox Code Playgroud)
小智 5
当使用重载来指示模板时,答案将不起作用@Html.DisplayFor(x => x.Foos, "YourTemplateName)。
好像就是这么设计的,看这个案例。另外,框架给出的异常(关于类型不符合预期)非常具有误导性,并且在第一次尝试时愚弄了我(感谢@CodeCaster)
在这种情况下你必须使用@foreach
@foreach (var item in Model.Foos)
{
@Html.DisplayFor(x => item, "FooTemplate")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
195749 次 |
| 最近记录: |