代码之家  ›  专栏  ›  技术社区  ›  DaveDev

对于模型绑定复杂嵌套类型,什么是好的HTML命名约定?

  •  0
  • DaveDev  · 技术社区  · 14 年前

    如果我有一个由嵌套的复杂类型组成的对象,例如具有 List<Fu> 和A List<Bar>

    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 select 列表,可以是fu或bar,其中每个 option 表示列表中的每个士兵,该选项具有包含ID、名称和年龄的属性,例如

    <%@ 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与哪个士兵关联。我有办法解决这个问题吗?我知道上面的代码无法验证,但我正在尝试为自己实现概念验证。

    另外,为了使这种方法能够得到休息,需要更改什么?

    1 回复  |  直到 14 年前
        1
  •  1
  •   John Farrell    14 年前