代码之家  ›  专栏  ›  技术社区  ›  37Stars

ASP中的模型绑定器。NET MVC测试版支持列表<T>?

  •  9
  • 37Stars  · 技术社区  · 17 年前

    以下面的类为例。我想在表单上显示客户和两个地址(来自LIST)。MVC测试版中的模型绑定器是否支持此功能,还是我必须编写自己的自定义绑定器?

    public class Customer
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public List<Address> Addresses { get; set; }
    
        public Customer()
        {
            Addresses = new List<Address>();
        }
    
    }
    
    public class Address
    {
        public int Line1 { get; set; }
        public int Line2 { get; set; }
        public int City { get; set; }
        public int State { get; set; }
        public int Zip { get; set; }
    }
    

    您将如何对字段进行编码?这样地?

    <!-- some HTML formatting -->
    <%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[0].Line1)%>
    <!-- some more HTML formatting -->
    <%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[1].Line1)%>
    <!-- end of HTML form formatting -->
    
    5 回复  |  直到 17 年前
        1
  •  5
  •   Eduardo Campañó    17 年前

    我从来没试过,但你看 this post,它是关于模型绑定到列表的,也许它可以帮助你。

        2
  •  1
  •   Tim Scott    17 年前

    使用Mvcntrib的NameValueDeserializer使其更简单。假设您的页面源自ViewPage<客户>。您可以这样做:

    <%= Html.TextBox("Address[0].Line1", ViewData.Model.Address[0].Line1)%>
    <%= Html.TextBox("Address[1].Line1", ViewData.Model.Address[1].Line1)%>
    

    还有这个:

    public ActionResult Save([Deserialize]Customer customer)
    

    客户将从表单发布中反序列化,并填充地址集合。索引不必按顺序排列——这支持在发布之前删除客户端行的情况。

    如果您正在从视图数据字典(而不是模型)中反序列化某些内容,则语法类似于[Reseerialize(“customer”)],其中“client”是前缀。

    你可能会发现这个 blog post 有趣且相关。

        3
  •  1
  •   37Stars    17 年前

    只是为了让这一切变得完整。使用名为Index的隐藏字段非常重要。所以我上面的代码变成了这样:

    <!-- some HTML formatting -->
    <%= Html.Hidden("customer.address.Index", 0) %>
    <%= Html.TextBox("customer.address[0].line1", ViewData.Customer.Address[0].Line1)%>
    <!-- some more HTML formatting -->
    <%= Html.Hidden("customer.address.Index", 1) %>
    <%= Html.TextBox("customer.address[1].line1", ViewData.Customer.Address[1].Line1)%>
    <!-- end of HTML form formatting -->
    

    它就像一个魅力!

        4
  •  0
  •   Community Mohan Dere    9 年前

    您可以像这样使用ViewData传递对象列表,但需要更改一些行。在这里阅读更多:

    http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx

    在这里:

    ASP.NET MVC: How do I pass a list (from a class in Model) to a repeater in a View?

    希望这有帮助


    编辑


    如果使用模型,则需要先设置DataContext并选择列表,但请确保可以使用使用LINQ生成的类。

        5
  •  0
  •   zsharp    17 年前

    我定义了一个类似的对象。我按照上面提到的关于绑定到列表的帖子进行了操作。虽然绑定有效,但我无法在控制器的操作参数中使用绑定白名单或黑名单。该模型是IList

    推荐文章