1

一个为customer,一个为address

所需功能当客户注册时,他们会在同一视图中输入他们的个人详细信息,例如姓名、电话以及地址详细信息。

当前功能 目前,EF 脚手架提供了一个地址下拉列表可供选择。

当前代码

public class Customer
{
    public int CustomerId { get; set; }
    public string FirstName { get; set; }
    [Required]
    public string Surname { get; set; }
    [Required]

    ...
    Customer Fields
    ...

    public int AddressId { get; set; }

    public virtual Address Address { get; set; }
}

public class Address
{
    [Key]
    public int AddressId { get; set; }

    ...
    Address Fields
    ...

    // Navigation Properties
    public virtual List<Customer> Customer { get; set; }
}

在为数据库播种时,我可以这样做:

new List<Customer>
    {
        new Customer 
            { 
                ** Customer Fields ** , 
                Address = new Address { ** Address Fields ** }
            }
    }.ForEach(c => context.Customers.Add(c));
base.Seed(context);

我的想法

我最初的想法是我应该创建一个名为的第三个数据模型CustomerWithAddress,它本质上是一个customer模型的组合address。这将允许我搭建一个强类型视图。

或者,控制器是否可以将 2 个模型传递给 1 个视图?

我不知道这是否是解决此问题的最佳方法,或者实际上是否可能。有什么想法吗?

4

1 回答 1

0

如果您的客户模型具有地址属性,那么您将能够从您的视图中访问它。例如

@Html.DisplayTextFor(x => model.Address.Addressline1)

您的视图模型想法是一个很好的想法,但对于这种特殊情况,它不是必需的。

编辑:正如我下面的朋友所指出的,如果您使用延迟加载,您可能需要手动加载 Address 属性。

于 2013-06-03T13:45:43.573 回答