我有这个控制器:
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
由于
答案 0 :(得分:2)
假设邮政体是正确的;您需要重写字段并将其转换为public get/set
属性。
MVC不会模拟绑定到字段。
由于您希望成员拥有非默认默认值;你可以使用默认的ctor来设置构造的属性默认值;虽然我更喜欢不使用自动实现属性的方法:
private string _email = string.Empty;
public string Email { get { return _email; } set { _email = value } }
实际上,我认为在运行时几乎没有什么区别 - 但是如果你使用构造函数方法,那么在添加新属性时很容易忘记为它添加一个新的默认值。
MVC最终不会绑定到字段,因为它以循环方式使用System.ComponentModel.TypeDescriptor
类来获取用于标识要绑定的模型属性的元数据。这不是一个错误,但它是设计上的并且是一个很好的设计选择,因为它使除反射之外的机制能够用于描述模型类型。