用于集合的Asp MVC3自定义EditorTemplate(空或不)

时间:2010-12-09 14:04:35

标签: asp.net asp.net-mvc asp.net-mvc-3 collections editortemplates

经过大量谷歌搜索,stackoverflowing(?)和博客阅读我仍然无法完全解决问题。希望这个专家社区可以来救援!

给定: 具有字段ICollection的公司类(公司可以有多个地址)。每个地址都有一些简单的字符串字段。

简短版本:

我希望用户能够向公司添加任意数量的地址。首先,我想显示一组地址文本框,然后显示“添加一个地址”按钮。 Javascript没有问题,而是mvc部分。如果不清楚,功能应该类似于此: http://www.mdelrosso.com/sheepit/index.php?lng=en_GB&sec=demo3

我需要使用MVC EditorForModel()函数,这意味着所有配置都需要进入编辑器模板。

到目前为止的状态:

  • 为编辑公司页面(CompanyViewModel)创建了ViewModel
  • 将[UIHint(“地址”)]添加到字段public ICollection Addresses {get;组; }
  • 创建的地址EditorTemplate

在Addresses EditorTemplate中,添加新公司时,传入的模型为Null(没有惊喜)。如何为额外地址创建编辑器?我尝试了多种化身(使用Razor):

@Html.EditorFor(m => new Address());

但是即使是远程工作也无法生产任何东西。 (上面的确切行给出错误“模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。”)

感谢您的任何指示!

/维克多

1 个答案:

答案 0 :(得分:4)

这是当前API的缺点。你可以做的一种方法是让一个负责生成插入表单的子操作

在您的控制器中:

[ChildActionOnly]
public ActionResult AddAddress() {
    return View(new Address()); // pass an instance so view works
}

添加新视图AddAddress.cshtml

@model Address
@Html.EditorForModel()

然后在编辑器模板中使用

@Html.Action("AddAddress")
相关问题