MVC - 在同一页面上与多个实体进行模型绑定

Dko*_*ong 6 asp.net-mvc

我想知道如何在我从页面上的多个实体返回信息的场景中使用模型绑定?

我想显示来自两个独立实体的字段组合,即Customer + Address.我正在为我的模型使用Microsoft的DAAB和自定义业务实体.

有任何想法吗?

tva*_*son 20

如果您尝试在回发时绑定到多个模型,则应尝试使用Bind属性并在参数中指定用于每个模型的前缀.在某些情况下 - 您可能无法为模型元素使用单独的前缀 - 您可能会发现使用多个TryUpdateModel和单独的白名单更容易,而不是将模型放在参数中.

public ActionResult Update( [Bind(Prefix="Customer")]Customer customer,
                            [Bind(Prefix="Address")]Address address )
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

这假设您有一个ViewModel,如:

public class CustomerAddressModel
{
    public Customer Customer { get; set; }
    public Address Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并参考它:

<%= Html.TextBox( "Customer.Name" ) %>
...
<%= Html.TextBox( "Address.Street" ) %>
Run Code Online (Sandbox Code Playgroud)

或者,使用TryUpdateModel,

public ActionResult Update( int id )
{
    var customer = db.Customers.Where( c => c.ID == id ).Single();

    var whitelist = new string[] { "name", "company", ... };
    if (TryUpdateModel( customer, whitelist ))
    {
        var addressWhitelist = new string[] { "street", "city", ... };
        if (TryUpdateModel( customer.Address, addressWhitelist ))
        {
            ...
        }
    }
Run Code Online (Sandbox Code Playgroud)

}

在这种情况下,您的模型可能只包含您尝试更新的两个不同模型中的字段.

public class CustomerAddressModel
{
    public string Name { get; set; }
    public string Company { get; set; }
    public string Street { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)