1

我的场景非常复杂,所以我用下面的例子对其进行了简化。主要问题是绑定模型的集合属性,指定属性的路径,例如Html.TextBox("List[0].Name")而不是Html.TextBoxFor(t => t.List[0].Name). 所以,对于当前视图,我只会知道模型的一些元数据,所以我必须以这种方式构建它。这是场景:

模型

public class ModelTest
{
    public int Id {get;set;}
    public List<Foo> Collection {get;set;}
}

public class Foo
{
    public string Value1 {get;set;}
    public string Value2 {get;set;}
}

控制器

public class TestController: Controller
{
    [HttpGet]
    public ActionResult Test()
    {
        var model = new ModelTest()
        {
            Id = 455,
            Collection = new List<Foo>()
            {
                new Foo(){ Value1 = "sagasga", Value2 = "Beul"},
                new Foo(){ Value1 = "dgdsgds", Value2 = "fhfhd" }
            }
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Test( ModelTest model)
    {
        //....
        return View();
    }

看法:

@using (Html.BeginForm())
{
    @Html.TextBox("Id")
    @Html.TextBox("Collection[0].Value1")
    @Html.TextBox("Collection[0].Value2")
    <input type="submit" value="Add" />
}

对于上面的代码,我得到集合值的空文本框。但是,当提交页面时,我在 Post 方法中得到了正确构建的模型。

非常感谢,亚历克斯

4

1 回答 1

3

当您想将集合发布到控制器时,这是为输入字段命名的方法。但是,您必须自己指定初始值。您的代码当前只是创建将 name 属性设置为的文本框Collection[0].Value1。您仍然需要以这种方式指定输入,

@Html.TextBox("Collection[0].Value1", Model.Collection.FirstOrDefault().Value1)
@Html.TextBox("Collection[0].Value2", Model.Collection.FirstOrDefault().Value2)
于 2013-01-15T18:29:19.357 回答