如何在HTTP POST </model>中获取List <model>对象

时间:2010-12-29 13:23:58

标签: c# .net asp.net asp.net-mvc-3

我有两个模型类:

public class UserModel
{
    public Guid Id { get; set; }
    public string EmailAddress { get; set; }
    public string LoginName { get; set; }
    public string Password { get; set; }
}
public class GroupModel
{
    public Guid Id { get;  set; }
    public string Name { get; set; }
    public List<UserModel> Users { get; set; }
}

我通过继承GroupModel类创建了一个View(Create.Aspx)。

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MyApp.Models.GroupModel>" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Create</title>
</head>
<body>
    <% using (Html.BeginForm()) {%>
        <%: Html.ValidationSummary(true) %>

        <fieldset>
            <legend>Fields</legend>
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Id) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Id) %>
                <%: Html.ValidationMessageFor(model => model.Id) %>
            </div>
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Name) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Name) %>
                <%: Html.ValidationMessageFor(model => model.Name) %>
            </div>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>

    <div>
        <%: Html.ActionLink("Back to List", "Index") %>
    </div>
</body>
</html>

在我的aspx视图中只生成两个字段(Id,Name)。此外,我能够在ё[HttpPost]Í请求中的Model类对象中获取表单数据,其中包含控制器中ID和NAME字段的数据。

[HttpPost]
public ActionResult Create(GroupModel groupModel)
{
    try
    {
        // TODO: Add insert logic here
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

如何获取List<UserModel>对象中的数据?

我正在考虑将List控件与包含Users的复选框放在一起。然后使用控制器中的FormCollection对象捕获它们。

请建议我是否以正确的方式或有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用编辑器模板(~/Views/Shared/EditorTemplates/UserModel.ascx):

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<YourApp.Models.UserModel>" %>
<%: Html.TextBoxFor(model => model.Id) %>
<%: Html.ValidationMessageFor(model => model.Id) %>

<%: Html.TextBoxFor(model => model.EmailAddress) %>
<%: Html.ValidationMessageFor(model => model.EmailAddress) %>

<%: Html.TextBoxFor(model => model.LoginName) %>
<%: Html.ValidationMessageFor(model => model.LoginName) %>
...

然后在主视图中你可以包含这个编辑器模板:

...
<%: Html.EditorFor(model => model.Users) %>
<p>
    <input type="submit" value="Create" />
</p>

这将调用Users集合中每个项目的编辑器模板。因此,您可以在一些用户的GET操作中填写此集合,然后您就可以在表单中编辑他们的信息。