2010-12-17 32 views
0

客户有一个账单和送货地址,所以给出下面的数据库模式MVC2编辑多个链接的客户地址

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

而下面Enitity框架类

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

我输出我在我看来输入框,像这样

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

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

<% } %> 

当我发布表单值进入DeliveryAddress1和BillingAddress1然后经过迭代的FormCollection键,我得到以下值

客户.address.Address1 = “DeliveryAddress1,BillingAddress1”

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

回答

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集合的每个元素渲染模板。

+0

谢谢,这看起来很有趣。我将阅读WeekendWarrior提供的链接,但我可能会放弃,因为我已经使用EditorTemplates作为Customer实体。 – 2010-12-20 13:16:08

+0

完美。谢谢 – 2010-12-20 13:34:51