【发布时间】:2010-09-13 11:05:54
【问题描述】:
如果我有一个由嵌套复杂类型组成的对象,例如具有 List<Fu> 和 List<Bar> 的 ViewModel
public class WarViewModel
{
List<Fu> Fu { get; set; }
List<Bar> Bar { get; set; }
}
public class Fu
{
public int Id {get;set;}
public Soldier Private { get; set; }
}
public class Bar
{
public int Id {get;set;}
public Soldier Private { get; set; }
}
public class Soldier
{
public int Id {get;set;}
public string Name { get; set; }
public int Age { get; set; }
}
如果我有一个 form 包含 2 个 select 列表,使用 Fu 或 Bar,其中每个 option 代表列表中的每个士兵,并且选项具有包含 Id、Name 和 Age 的属性,例如
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WarViewModel>" %>
<% using (Html.BeginForm("WarAction", "War")) { %>
<% foreach (var soldier in Fu) %>
<select class="fu">
<option id='<%= soldier.Id %>' age='<%= soldier.Age %>'><%= soldier.Name %></option>
</select>
<% } %>
<% foreach (var soldier in Bar) %>
<select class="bar">
<option id='<%= soldier.Id %>' age='<%= soldier.Age %>'><%= soldier.Name %></option>
</select>
<% } %>
<% } %>
我需要使用什么命名约定,以便在提交表单时,以下操作方法的 WarViewModel 将填充两个列表中选择的士兵?
public ActionResult WarAction(WarViewModel war)
{
return View();
}
我现在的理解是模型绑定器不会知道士兵是哪个,所以它不会知道哪个 Id 与哪个士兵相关联。我有办法解决这个问题吗?我知道上面的代码不会验证,但我正在尝试为自己实现概念验证。
另外,要使这种方法成为 RESTful,需要进行哪些更改?
【问题讨论】:
标签: c# asp.net-mvc rest viewmodel model-binding