【问题标题】:What's a good HTML naming convention for model binding complex nested types?模型绑定复杂嵌套类型的良好 HTML 命名约定是什么?
【发布时间】: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


    【解决方案1】:

    您尝试做的事情已经得到支持:

    http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多