ASP.net MVC не десериализует класс в посте http - PullRequest
0 голосов
/ 25 января 2012

У меня есть этот контроллер:

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

MVC не десериализует переменную data.Переменная step получает в нее переменную post.

У меня есть другие классы, которые были десериализованы нормально, но этот не будет.это класс:

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;
    }

Кстати, расположение переменной не является проблемой, второе место при работе с другими делами.

Редактировать это значения(из хрома):

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

Спасибо

1 Ответ

2 голосов
/ 25 января 2012

Предполагается, что тело сообщения является правильным; вам нужно переписать поля и превратить их в public get/set свойства.

MVC не будет привязывать модель к полям.

Так как вы хотите иметь нестандартные значения по умолчанию для ваших членов; Вы можете использовать ctor по умолчанию, чтобы установить свойства по умолчанию для конструкции; хотя я бы предпочел подход, в котором вместо этого не используются автоматически реализованные свойства:

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

В действительности, я полагаю, что во время выполнения есть небольшая разница, но если вы используете конструкторский подход, очень легко забыть добавить новое значение по умолчанию при добавлении нового свойства.

MVC не будет привязываться к полям в конечном итоге, потому что он использует класс System.ComponentModel.TypeDescriptor для получения метаданных, используемых для определения свойств модели, которые должны быть связаны. Это не ошибка, однако, это дизайн и хороший выбор дизайна, поскольку он позволяет использовать механизмы, отличные от отражения, при описании типов моделей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...