簡體   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