yam*_*pog 8 asp.net-mvc html-helper strong-typing
我有一个局部视图,将对象列表呈现为表格格式,并允许编辑值...
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IList<whoozit.Models.PictureModel>>" %>
<% foreach (whoozit.Models.PictureModel p in Model)
{ %>
<td>
<%: Html.TextBox("name",p.name) %>
<%: Html.ValidationMessage(p.name) %>
</td>
<% } %>
Run Code Online (Sandbox Code Playgroud)
我想重构这个以利用mvc2中强类型的html助手.我很难理解如何创建lambda表达式,并希望得到一些帮助.以下对我来说似乎不太正确.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IList<whoozit.Models.PictureModel>>" %>
<% foreach (whoozit.Models.PictureModel p in Model)
{ %>
<td>
<%: Html.TextBoxFor(???) %>
</td>
<% } %>
Run Code Online (Sandbox Code Playgroud)
首先,你不应该在视图中迭代.迭代意味着循环,循环意味着C#/ VB.NET,C#/ VB.NET在视图中导致意大利面条代码.
我建议你使用编辑器模板.这样您就不需要在视图中编写循环.添加以下文件~/Views/Home/EditorTemplates/PictureModel.ascx
:
<%@ Control Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<whoozit.Models.PictureModel>" %>
<td>
<%: Html.TextBoxFor(x => x.name) %>
<%: Html.ValidationMessageFor(x => x.name) %>
</td>
Run Code Online (Sandbox Code Playgroud)
请注意,部分现在是强类型whoozit.Models.PictureModel
而不是IList<whoozit.Models.PictureModel>
.现在剩下的就是从主视图中包含这个部分:
<%: Html.EditorFor(x => x.Pictures) %>
Run Code Online (Sandbox Code Playgroud)
主视图模型上Pictures
的类型属性在哪里IList<whoozit.Models.PictureModel>
.这将自动为集合的每个元素调用partial,这样您就不需要在视图中编写丑陋的循环.
它只是按惯例工作:部分需要被调用PictureModel.ascx
作为列表元素的类型名称并位于~/Views/Home/EditorTemplates
或~/Views/Shared/EditorTemplates
文件夹中.
编辑/显示模板将使您的视图更加优雅.
备注:在.NET中,约定是以大写字母开头的属性名称,因此我建议您将name
属性重命名为Name
.写作和阅读感觉更自然:
<%: Html.TextBoxFor(x => x.Name) %>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2460 次 |
最近记录: |