我想重构它以利用 mvc2 中的强类型 html 帮助程序。我在理解如何创建 lamb-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:30:34 26 4
gpt4 key购买 nike

我有一个部分 View ,它将对象列表呈现为表格格式并允许编辑值...

<%@ 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>

<% } %>

最佳答案

首先,您不应该在 View 中进行迭代。迭代意味着循环,循环意味着 C#/VB.NET, View 中的 C#/VB.NET 会导致意大利面条式代码。

我建议您使用Editor Templates 。这样您就不需要在 View 中编写循环。在~/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>

请注意,部分现在强类型化为 whoozit.Models.PictureModel而不是IList<whoozit.Models.PictureModel> 。现在剩下的就是从主视图中包含这个部分:

<%: Html.EditorFor(x => x.Pictures) %>

哪里PicturesIList<whoozit.Models.PictureModel> 类型的属性在你的主视图模型上。这将自动调用集合中每个元素的部分,这样您就不需要在 View 中编写丑陋的循环。

它只是按照惯例工作:部分需要被称为 PictureModel.ascx作为列表元素的类型名称,位于 ~/Views/Home/EditorTemplates~/Views/Shared/EditorTemplates文件夹。

编辑器/显示模板将使您的 View 更加优雅。

备注:在 .NET 中,约定属性名称以大写字母开头,因此我建议您重命名 name属性至Name 。书写和阅读感觉更加自然:

<%: Html.TextBoxFor(x => x.Name) %>

关于asp.net-mvc - mvc.net 如何在迭代列表时使用强类型助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3710949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com