0

任何人都知道如何从控制器调用与 Html.EditorFor() 等效的功能吗?

我的视图中有一个标准表。这些行使用 EditorTemplate

<table id="tableOfBar">
    <tfoot>
        <tr><td colspan="2">Some paging controls and whatnot</td></tr>
    </tfoot>
    <tbody>
        <% for (int i=0;i<Model.Rows.Count();i++)
           {
               int j = i;
        %><%: Html.EditorFor(m => m.Rows[j], "FooRowTemplate", "Rows["+j+"]", new { OtherViewDataStuff})%>
    </tbody>
</table>

编辑器模板是一个强类型的局部视图,它返回<tr>和子元素。

所有这些工作正常,但下一步是添加一个“添加行”按钮。由于一系列超出范围的原因,我想访问服务器而不是纯粹的客户端解决方案。我想要做的是将 EditorTemplate 作为部分视图返回,并让 JavaScript 获取返回的 Html 并将其附加到表中。

[HttpPost]
public ActionResult AddRow(FooModel model)
{
    var row = new FooRowModel();
    model.AddRow(row);
    var index = model.Rows.IndexOf(row);
    return PartialView("~/Areas/MyArea/Views/Shared/EditorTemplates/FooRowTemplate.ascx", model.Rows[index]);
}

除了输入命名之外,所有这些都可以正常工作。缺少的部分是集合前缀内容,它告诉模型绑定器如何在回发时重新组装模型。在视图方面,您可以指定这应该是什么(这是上面调用的"Rows["+j+"]"一部分EditorFor())。

你能像 EditorFor() 一样给局部视图一个 html 字段名称前缀吗?关于如何使这项工作的任何想法?我的整个方法可能完全错误,这很好。告诉我为什么。:)

谢谢你的帮助。

4

1 回答 1

1

我建议您阅读以下博客文章,其中详细解释了如何实现您正在寻找的内容。

于 2010-12-01T07:23:40.447 回答