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

asp.net-mvc – 嵌套属性的模型绑定在asp.net mvc中

发布时间:2020-12-15 22:43:20 所属栏目:asp.Net 来源:网络整理
导读:我想要在我的mvc应用程序中获得一些绑定.我发现嵌套属性不是由asp.net mvc的RC1版本中的默认模型绑定器自动绑定的.我有以下类结构: public class Contact{ public int Id { get; set; } public Name Name { get; set; } public string Email { get; set; }
我想要在我的mvc应用程序中获得一些绑定.我发现嵌套属性不是由asp.net mvc的RC1版本中的默认模型绑定器自动绑定的.我有以下类结构:
public class Contact{  
    public int Id { get; set; }  
    public Name Name { get; set; }  
    public string Email { get; set; }  
}

名称的定义如下:

public class Name{  
    public string Forename { get; set; }  
    public string Surname { get; set; }  
}

我的观点是按照以下方面定义的:

using(Html.BeginForm()){  
    Html.Textbox("Name.Forename",Model.Name.Forename);  
    Html.Textbox("Name.Surname",Model.Name.Surname);  
    Html.Textbox("Email",Model.Email);  
    Html.SubmitButton("save","Save");  
}

我的控制器动作定义为:

public ActionResult Save(int id,FormCollection submittedValues){  
    Contact contact = get contact from database;  
    UpdateModel(contact,submittedValues.ToValueProvider());  

    //at this point the Name property has not been successfully populated using the default model binder!!!
}

电子邮件属性已成功绑定,但不是Name.Forename或Name.Surname属性.任何人都可以告诉这是否应该使用默认的模型绑定工具,我做错了什么,或者它不工作,我需要滚动我自己的代码绑定模型对象的嵌套属性?

解决方法

我认为问题是由于属性上的名称前缀.我想你需要将它更新为两个模型,并指定第二个模型的前缀.请注意,我已经从参数中删除了FormCollection,并使用依赖于内置值提供程序的UpdateModel的签名,并指定了要考虑的属性的白名单.
public ActionResult Save( int id )
 {
     Contact contact = db.Contacts.SingleOrDefault(c => c.Id == id);

     UpdateModel(contact,new string[] { "Email" } );
     string[] whitelist = new string[] { "Forename","Surname" };
     UpdateModel( contact.Name,"Name",whitelist );
 }

(编辑:李大同)

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

    推荐文章
      热点阅读