加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – mvc.net如何在迭代列表时使用强类型助手

发布时间:2020-12-16 04:36:10 所属栏目:asp.Net 来源:网络整理
导读:我有一个局部视图,将对象列表呈现为表格格式,并允许编辑值… %@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControlIListwhoozit.Models.PictureModel" %% foreach (whoozit.Models.PictureModel p in Model) { % td %: Html.TextBox("name",p
我有一个局部视图,将对象列表呈现为表格格式,并允许编辑值…
<%@ 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) %>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读