我有一个局部视图,将对象列表呈现为表格格式,并允许编辑值…
<%@ 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> <% } %>
我想重构这个以利用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> <% } %>
解决方法
首先,您不应该在视图中进行迭代.迭代意味着循环,循环意味着C#/ VB.NET,C#/ VB.NET在视图中导致意大利面条代码.
我建议您使用Editor Templates.这样您就不需要在视图中编写循环.在〜/ 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>
请注意,partial现在强类型为whoozit.Models.PictureModel而不是IList< whoozit.Models.PictureModel>.现在剩下的就是从主视图中包含这个部分:
<%: Html.EditorFor(x => x.Pictures) %>
其中Pictures是IList< whoozit.Models.PictureModel>类型的属性.在您的主视图模型上.这将自动为集合中的每个元素调用partial,这样您就不需要在视图中编写丑陋的循环.
它只是按惯例工作:部分需要被称为PictureModel.ascx作为列表元素的类型名称,位于〜/ Views / Home / EditorTemplates或〜/ Views / Shared / EditorTemplates文件夹中.
编辑/显示模板将使您的视图更加优雅.
备注:在.NET中,约定是以大写字母开头的属性名称,因此我建议您将name属性重命名为Name.写作和阅读感觉更自然:
<%: Html.TextBoxFor(x => x.Name) %>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。