MVC 4 Razor:当我使用表单帖子时对缺少的集合进行建模



我有一个正在构建的 MVC 4 站点,它从 WCF 服务获取所有数据。我试图偷懒,在我的 MVC 模型中使用在我的 WCF 项目中生成的代理类。目前为止,一切都好。

我有一个窗体视图,它包含一个 Customer 类,该类具有一堆基元类型化属性和 3 个其他复杂对象的泛型列表 (List)。

基元类型一切都按预期工作,我能够将表单中的一些字段绑定到视图并对其进行编辑。伟大。

我的问题是,当模型回发到窗体时,集合始终为空,即使它们最初填充了对象。

知道为什么 MVC 不会在表单发布期间将我的子集合保留在模型中吗?

<!-- form -->
@using (Html.BeginForm("ourinformation", "Account", Model, FormMethod.Post, new{id= "contactForm" })){} 

您需要将集合发布回控制器,例如,假设您有以下用作模型的类:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Group> Groups { get; set; }
}
public class Group
{
    public int Id { get; set; }
    public string Name { get; set; }
}

然后说这是您将模型传递到视图的方式:

public ActionResult Index()
{
    var model = new User
    {
        Name = "Test",
        Groups = new List<Group>
        {
            new Group {Name = "GROUP1"},
            new Group {Name = "GROUP2"}
        }
    };
    return View(model);
}

这就是你期待的方式:

[HttpPost]
public ActionResult Index(User user)
{
    // do your thing ...
}

您的视图应如下所示:

<form action="/" method="post">
    <input id="Name" name="Name" type="text" value="Test" /><
    <input name="Groups[0].Name" type="text" value="GROUP1" />
    <input name="Groups[1].Name" type="text" value="GROUP2" />
    <input type="submit" value="Submit" name="Submit" />
</form> 

现在,如果您提交,您的模型将被填充。当然,您可以对Group集合使用编辑器模板,只需在EditorTemplates -> '/Shared/EditorTemplates/Group.cshtml' 中创建一个包含以下内容的视图:

@model MyApp.Models.Group
@Html.EditorFor(x => x.Name)

现在回到你的Index.cshtml,你可以做:

@model User
@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.Name)
    @Html.EditorFor(x => x.Groups)
    <input type="submit" value="Submit" name="Submit" />
} 

在这里,@Html.EditorFor(x => x.Groups)将循环访问您的集合,并创建与编辑器模板中对应的必要标记。我希望这有所帮助。

最新更新