【问题标题】:ASP.NET MVC 2 RC: How to use the EditorFor to render correct name attributes for a List<>?ASP.NET MVC 2 RC:如何使用 EditorFor 为 List<> 呈现正确的名称属性?
【发布时间】:2012-05-06 00:13:50
【问题描述】:

MVC RC 2 docs,我们发现:

当表达式包含数组或集合索引时,呈现输入元素的基于表达式的帮助器会生成正确的名称属性。例如,由 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()
    }

【问题讨论】:

  • EditorFor 现在支持数组和集合,因此索引是输入 html 标记的 id 的一部分。哪些 C# 代码可以展示如何使用它,尤其是当您使用 List 并且您希望数据模型绑定回原始对象时?
  • 该示例显示了一个带有学生列表的 Classroom 对象。我创建了一个教室模板和一个学生模板,但想知道在教室模板中放入什么 C# 代码以使用 EditorFor 呈现学生,以便在我发布时,它模型绑定回 myClass 对象。

标签: asp.net-mvc-2 collections editorfor


【解决方案1】:

这段代码:

<% 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="" 标签。

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 2013-12-22
    • 2014-06-24
    • 2011-04-13
    • 2023-03-26
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多