ASP.NET MVC 3 ModelState.IsValid всегда возвращает true для данных в кодировке JSON, используя Ext.Direct - PullRequest
2 голосов
/ 17 августа 2011

У меня есть форма, и единственное, что требуется, это имя клиента.Итак, в моей модели у меня есть:

 [DisplayName("Customer name*:")]
 [Required]
 public string CustomerName
 { get; set; }

Раньше я делал пост HTML, и все работало нормально, включая проверку.

Теперь я «откорректировал» форму, используя Ext.direct.mvc (http://code.google.com/p/ext-direct-mvc/),, что является существенным фактом, и разместив данные в формате Json, и данные успешно публикуются.

enter image description here

Когда я ставлю точку останова в своем коде (в настоящий момент измененную для целей отладки):

 [DirectInclude]
    [HttpPost]
    public ActionResult SaveOrUpdateOrderLines(CustomerOrderModel customerOrderModel)
    {

        if (!ModelState.IsValid)
        {
            return ModelState.JsonValidation();
        }

        return null;

Я вижу, что CustomerOrderModel.CustomerOrderHeader.CustomerName= ""

enter image description here

Но ModelState.IsValid имеет значение true.

enter image description here

Теперь о некоторых вещах, которые япробовал:

  1. Я вставил следующий код непосредственно перед проверкой ModelState.isValid, чтобы убедиться, что CustomerName = null

    customerOrderModel.CustomerOrderHeader.CustomerName = null;

  2. Я пытался использовать TryUpdateModel (customerOrderModel), но получаю следующее сообщение об ошибке:

    TryUpdateModel выдал исключение типа 'System.MissingMethodException'

  3. Я пытался изменитьданные json, чтобы «корневой» «CustomerOrderHeader» был переименован в «customerOrderModel» для соответствия параметру.

Ничего из этого не помогло.Так что я могу сделать неправильно, что проверка больше не работает?Какие шаги можно предпринять для устранения проблемы?

РЕДАКТИРОВАТЬ для counsellorBen

enter image description here

РЕДАКТИРОВАТЬ 2 для counsellorben

enter image description here

1 Ответ

0 голосов
/ 17 августа 2011

Проблема в том, что при попытке связать ответ Json имя переменной в действии вашего контроллера должно совпадать с именем переменной, передаваемой на стороне клиента.Ваша модель действительна, потому что CustomerOrderHeader имеет значение null.

В вашем клиентском скрипте вы должны заключить всю модель в элемент с именем "customerOrderModel", чтобы имя соответствовало имени переменной в вашем действии.

...