使用Html.EditorFor为新记录创建空白

时间:2012-02-26 14:47:08

标签: asp.net-mvc-3 templates

使用EditorFor模板是ASP.Net MVC 3的一个非常好的功能,但是有可能让EditorFor渲染一个无人居住的模板以允许创建记录吗?

还是有其他方法可以做到这一点吗?

我尝试这样做的方式如下:

    @Html.EditorFor(model => model)
    @Html.EditorFor(x => new List<Business.ViewModel.Affiliate.Contact>())
    @Html.EditorFor(new List<Business.ViewModel.Affiliate.Contact>())
    @Html.EditorFor(new Business.ViewModel.Affiliate.Contact())

第一个显然有效,但随后的(显示我正在尝试做的事情)都会因以下错误而失败:

    Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

有问题的模型是:

    IEnumerable<Business.ViewModel.Affiliate.Contact>

2 个答案:

答案 0 :(得分:6)

控制器负责准备将传递给视图的视图模型。因此,如果您需要使用5个空联系人行初始化视图模型,则只需在控制器中执行此操作:

public ActionResult Index()
{
    var model = new MyViewModel
    {
        // Add 5 empty contacts
        Contacts = Enumerable.Range(1, 5).Select(x => new Contact()).ToList()
    };
    return View(model);
}

并在您的视图中照常使用EditorFor帮助程序:

@model MyViewModel
...
@Html.EditorFor(x => x.Contacts)

这将为我们添加到Contacts集合的5个元素中的每个元素呈现相应的编辑器模板。

答案 1 :(得分:0)

如果您的问题不涉及AJAX,那么我会将ViewModel设计如下:

class MyList
{
    public List<MyRow> Rows {get;set;}
    public MyRow NewRow {get;set;}
}

然后,您可以轻松添加绑定到NewRow属性的空白编辑器。在控制器中,您可以在后续调用中将NewRow添加到行中。