9

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

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 -->
4

5 回答 5

5

我从来没有尝试过,但是看看这篇文章,它是关于模型绑定到列表的,也许它可以帮助你。

于 2009-01-02T17:36:39.203 回答
1

使用 MvcContrib 的 NameValueDeserializer 使其更简单。假设您的页面派生自 ViewPage<Customer>。你可以这样做:

<%= 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)

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

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

您可能会发现此博客文章有趣且相关。

于 2009-01-03T15:32:49.247 回答
1

只是为了完成这个。使用名称为 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 -->

它就像一个魅力!

于 2009-01-05T18:37:02.543 回答
0

您可以像这样使用 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:如何将列表(来自模型中的类)传递给视图中的转发器?

希望这可以帮助


编辑


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

于 2009-01-02T17:36:33.540 回答
0

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

于 2009-01-02T19:32:08.097 回答