MVC2如何编辑多个链接的客户地址

时间:2010-12-17 17:05:14

标签: asp.net-mvc asp.net-mvc-2

客户具有开票和送货地址,因此给出以下数据库架构

  • 客户(客户ID)
  • 地址(AddressId)
  • CustomerAddresses(客户ID,AddressId)

以下Enitity Framework类

public class Customer
{
    public IEnumerable<Address> Addresses { get; set; }
}

我在视图中输出我的输入框

<% foreach (var address in Model.Addresses) { %> 

    <%: Html.TextBoxFor(model => address.Address1) %>

<% } %>

当我在输入DeliveryAddress1和BillingAddress1后发布表单值然后迭代FormCollection键时,我得到以下值

  

Customer.address.Address1 =   “DeliveryAddress1,BillingAddress1”

问题是如何区分这两个记录?

2 个答案:

答案 0 :(得分:1)

您应该尝试此链接 - 它有助于多列​​模型绑定:

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

答案 1 :(得分:1)

我建议您使用编辑器模板。这样您就不需要在视图中编写丑陋的循环,并且帮助程序将负责为输入字段生成适当的名称。

因此,在您的主视图中,而不是编写您所显示的所有代码:

<%: Html.EditorFor(x => x.Addresses) %>

然后为地址(~/Views/Home/EditorTemplates/Address.ascx

创建编辑器模板
<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<YourApp.Models.Address>" %>    
<%: Html.TextBoxFor(x => x.Address1) %>

注意编辑器模板的名称和位置。该位置应位于EditorTemplates文件夹中(也可能位于~/Views/Shared/EditorTemplates/Address.ascx中),名称应与类名称(Address)相同。 ASP.NET MVC将负责为模型的Addresses集合的每个元素呈现模板。