如何在MVC3中显示可编辑实体的集合并在回发到Action时处理它们?

时间:2012-05-16 16:18:21

标签: asp.net-mvc-3

我有一组名为Accounts的实体。单个用户将拥有多个帐户,并可以为每个帐户设置百分比。

用户界面将列出所有帐户,每个帐户的可编辑字段为百分比属性。这将由文本框表示。

用户进行任何调整后,会将表格发回处理。

我在其他一些项目中使用过MVC并且我理解模型绑定,但我不知道如何处理模型的 集合

我不是在寻找代码,也不是某人为我写出完整的答案(尽管老实说,我不会抱怨......)。我正在寻找指导方向。

提前致谢。

2 个答案:

答案 0 :(得分:1)

两件事:

1)您需要在总体页面视图模型中使用Account / List of Account或List / Collection of AccountViewModel

所以,你会有

public class MyPageViewModel
{
    public Collection<Account> AccountList; 
    //AccountViewModel is what I'd use but for simplicity
    //Other properties for view model
}

您现在拥有一个包含帐户列表的视图模型。

2)

在您看来,您有两种选择。

a)只需创建一个for循环来为每个帐户吐出你想要的HTML(不是特别漂亮)

b)创建一个编辑器模板,这样您就不必做任何特别的事情了 您的页面将具有此功能。

@Html.EditorFor(model => model.AccountList)

以下是编辑器模板的设置方法。

enter image description here

这是我正在进行的一个项目。这里的内容应该是您在视图文件夹下添加一个“EditorTemplates”文件夹,该文件夹与您正在处理的内容相匹配。按照惯例,当您使用EditorFor时,MVC将在此文件夹中查找模板。现在,您只需在强类型模板中插入所需的任何HTML(这将采用Account或AccountViewModel对象),您就完成了。您的视图中不需要for循环就可以为每个帐户分配HTML。

真的,那就是那个时候。您的帖子操作会将绑定模型绑定到MyPageViewModel类型,该类型将包含您想要的更新数据

希望能让你指出正确的方向。

答案 1 :(得分:1)

以下是如何解决您的任务的示例

首先让我们定义一个模型:

public class Account
{
    public int Id { get; set; }
    public string Number { get; set; }
    public decimal Percentage { get; set; }
}

public class UserEditModel
{
    public ICollection<Account> Accounts { get; set; }
}

UserEditModel是一个视图模型。它包含声明为帐户集合的属性帐户。

我将在视图中描述一个表格以显示帐户并编辑其百分比:

<form action="Url.Action("Save")" method="POST">
<table>
  <thead>
    <tr>
       <td>Number</td>
       <td>Percentage</td>
    </tr>
  </thead>
  <tbody>
    @for (var i = 0; i < Model.Accounts.Count(); i ++)
    {
      <tr>
         <td>
            @Html.HiddenFor(m => m.Accounts[i].Id)
            @Html.HiddenFor(m => m.Accounts[i].Number)
            @Model.Accounts[i].Number
         </td>
         <td>
            @Html.TextBoxFor(m => m.Accounts[i].Id)
         </td>
      </tr>
    }
  </tbody>
</table>
</form>

在视图模型的Accounts属性中提交表单后,我们将按用户百分比值更改。