ASP.NET MVC 2 RC:如何使用 EditorFor 呈现 List<> 的正确名称属性?

发布于 2024-08-22 19:13:56 字数 1064 浏览 10 评论 0 原文

MVC RC 2 文档中,我们发现:

当表达式包含数组或集合索引时,呈现输入元素的基于表达式的帮助程序会生成正确的名称属性。例如,由 Html.EditorFor(m => m.Orders[i]) 呈现的列表中第一个订单的 name 属性值将为 Orders[0]。

有人愿意链接 C# 视图代码的示例(使用列表,其中结果可以在发布时绑定回模型)?

作为参考,我使用以下代码来验证模型绑定正确往返。它只是显示允许更改的视图,然后在表单提交时显示包含已编辑数据的视图。

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var myStudents = new List<Student>();

        myStudents.Add(new Student { Name = "Harry" });
        myStudents.Add(new Student { Name = "Tom" });
        myStudents.Add(new Student { Name = "Richard" });
        var myClass = new Classroom {Students = myStudents};

        return View(myClass); // EditorFor()
    }

    [HttpPost]
    public ActionResult Index( Classroom myClass)  
    {
        return View("IndexPost", myClass); // DisplayFor()
    }

In the MVC RC 2 docs, we find:

Expression-based helpers that render input elements generate correct name attributes when the expression contains an array or collection index. For example, the value of the name attribute rendered by Html.EditorFor(m => m.Orders[i]) for the first order in a list would be Orders[0].

Anyone care to link an example of the C# view code (using a List where the result can bind back to the Model upon post)?

Just as a reference, I use the following code to verify the model binds correctly round trip. It simply shows view that allows change, then displays a view with the edited data upon form submission.

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var myStudents = new List<Student>();

        myStudents.Add(new Student { Name = "Harry" });
        myStudents.Add(new Student { Name = "Tom" });
        myStudents.Add(new Student { Name = "Richard" });
        var myClass = new Classroom {Students = myStudents};

        return View(myClass); // EditorFor()
    }

    [HttpPost]
    public ActionResult Index( Classroom myClass)  
    {
        return View("IndexPost", myClass); // DisplayFor()
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

狼性发作 2024-08-29 19:13:56

这段代码:

<% for (int count = 0; count < Model.Students.Count; count++ )
   {                                              %><%= 
      Html.EditorFor(m => m.Students[count])      %><%
   } 
%>

渲染了这个输出:

<input class="text-box single-line" id="Students_0__Name" name="Students[0].Name" type="text" value="Harry" />
<input class="text-box single-line" id="Students_1__Name" name="Students[1].Name" type="text" value="Tom" />
<input class="text-box single-line" id="Students_2__Name" name="Students[2].Name" type="text" value="Richard" />

当我发布内容时,显示是这样的(因为我有一个 Student.ascx):

<table>
    <tr><td><span>Harry</span> </td></tr>
    <tr><td><span>Tom</span> </td></tr>
    <tr><td><span>Richard</span> </td></tr>
</table>

但就是这样(我认为)。下一个问题是如何摆脱那些 name="" 标签。

This code:

<% for (int count = 0; count < Model.Students.Count; count++ )
   {                                              %><%= 
      Html.EditorFor(m => m.Students[count])      %><%
   } 
%>

Rendered this output:

<input class="text-box single-line" id="Students_0__Name" name="Students[0].Name" type="text" value="Harry" />
<input class="text-box single-line" id="Students_1__Name" name="Students[1].Name" type="text" value="Tom" />
<input class="text-box single-line" id="Students_2__Name" name="Students[2].Name" type="text" value="Richard" />

And when I posted the content, the display was this (because I have a Student.ascx):

<table>
    <tr><td><span>Harry</span> </td></tr>
    <tr><td><span>Tom</span> </td></tr>
    <tr><td><span>Richard</span> </td></tr>
</table>

But that's it (I think). Next question is how to get rid of those name="" tags.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文