繁体   English   中英

ASP.net MVC不会在http帖子中反序列化一个类

[英]ASP.net MVC wont deserialize a class in http post

我有这个控制器:

public JsonResult Register(string step , GlobalOnBoardingDataModel data){}

MVC不会反序列化data变量。 step变量将post var变为它。

我有其他被反序列化的类很好,但是这个不会。 这是班级:

public class GlobalOnBoardingDataModel : BaseStepDataModel
    {
        public string Email = string.Empty;
        public string FirstName = string.Empty;
        public string LastName = string.Empty;
        public string PhoneAreaCode = string.Empty;
        public string PhoneCountryCode = string.Empty;
        public string PhoneNumber = string.Empty;
        public string CountryShortName = string.Empty;
        public string AccountCurrency = string.Empty;
        public float InitialDepositAmount = 0;
        public string Address = string.Empty;
        public string City = string.Empty;
        public string State = string.Empty;
        public string DateOfBirth = string.Empty;
        public string CreditCardNumber = string.Empty;
        public string CreditCardExperationDate = string.Empty;
        public bool RiskDisclosure = false;
        public bool Beneficiary = false;
        public string CVVNumber = string.Empty;
        public bool Subscribe = false;
    }

BTW,var的位置不是问题,与其他情况一起工作的第二位。

编辑这些是值(来自chrome):

step:one
FirstName:kjh
LastName:
CountryShortName:IL
PhoneNumber:
PhoneAreaCode:
PhoneCountryCode:
Email:Test@test.com

谢谢

假设帖体是正确的; 您需要重写字段并将其转换为public get/set属性。

MVC不会模拟绑定到字段。

由于您希望成员具有非默认默认值; 你可以使用默认的ctor来设置构造的属性默认值; 虽然我更喜欢不使用自动实现属性的方法:

private string _email = string.Empty; 
public string Email { get { return _email; } set { _email = value } } 

实际上,我认为在运行时几乎没有什么区别 - 但是如果你使用构造函数方法,那么在添加新属性时很容易忘记为它添加新的默认值。

MVC最终不会绑定到字段,因为它以循环方式使用System.ComponentModel.TypeDescriptor类来获取用于标识要绑定的模型属性的元数据。 这不是一个错误,但它是设计上的并且是一个很好的设计选择,因为它使除反射之外的机制能够用于描述模型类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM