加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – MVC – 在同一页面上与多个实体进行模型绑定

发布时间:2020-12-15 18:57:47 所属栏目:asp.Net 来源:网络整理
导读:我想知道如何在我从页面上的多个实体返回信息的场景中使用模型绑定? 我想显示来自两个独立实体的字段组合,即客户地址.我正在为我的模型使用Microsoft的DAAB和自定义业务实体. 有任何想法吗? 解决方法 如果您尝试在回发时绑定到多个模型,则应尝试使用Bind属
我想知道如何在我从页面上的多个实体返回信息的场景中使用模型绑定?

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

有任何想法吗?

解决方法

如果您尝试在回发时绑定到多个模型,则应尝试使用Bind属性并在参数中指定用于每个模型的前缀.在某些情况下 – 您可能无法为模型元素使用单独的前缀 – 您可能会发现使用多个TryUpdateModel和单独的白名单更容易,而不是将模型放在参数中.
public ActionResult Update( [Bind(Prefix="Customer")]Customer customer,[Bind(Prefix="Address")]Address address )
{
   ...
}

这假设您有一个ViewModel,如:

public class CustomerAddressModel
{
    public Customer Customer { get; set; }
    public Address Address { get; set; }
}

并参考它:

<%= Html.TextBox( "Customer.Name" ) %>
...
<%= Html.TextBox( "Address.Street" ) %>

或者,使用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 ))
        {
            ...
        }
    }

}

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

public class CustomerAddressModel
{
    public string Name { get; set; }
    public string Company { get; set; }
    public string Street { get; set; }
    ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读