ASP.NET MVC: ModelState по сравнению с ModelStateDictionary

Моя среда разработки главных окон является собственным Vista x64. По упомянутым выше причинам видеокарты и (возможно необоснованный) касается о среде VM и отладке, я решил, что все еще хотел собственную среду для своего .NET и разработки Windows Win32/64. Я работаю намного больше в разработке GUI в настоящее время.

Однако один очень важный вид разработки я использовал VM's для в прошлом, основанные на Python программы, встроил ли чистый Python с wxWindows или Python, названный от C++. Используя VM позволил мне управлять средой Python и работой против различных установок, которые, как гарантировали, будут соответствовать среде развертывания. Я предложил бы это для любого использующего динамический язык, где Вы склонны устанавливать много внешних пакетов, и трудно чисто вернуться к более ранним версиям.

Другая вещь рассмотреть использует VM в качестве Вашей цели с удаленным куском отладки. Многие разработчики REALbasic на Macintosh делают это для своего тестирования Windows (REALbasic имеет невероятную межплатформенную отладку), но я также использовал его в прошлом для Visual Studio.

13
задан Alex 18 August 2009 в 05:06
поделиться

5 ответов

Нет, вы не хотите добавлять ModelStateDictionary к вашему типу результата. В контроллере уже есть ModelStateDictionary (в свойстве ModelState). Для результатов не подходит установка состояния модели контроллера. Это должно быть сделано во время привязки или внутри самого действия контроллера. При необходимости используйте настраиваемый связыватель модели.

Выбранный вами вариант может видеть ошибки состояния модели, исследуя свойство контроллера ViewData.ModelState.

2
ответ дан 2 December 2019 в 01:57
поделиться

Я не знаю, как выглядит ваш PlacementResult, посмотрите, можете ли вы использовать это в своем представлении:

ModelState.AddModelError(ErroredProperty, ErrorMessage);

Убедитесь, что вы вернули объект, который не прошел, обратно в представление

return View(myObjectInstance);
0
ответ дан 2 December 2019 в 01:57
поделиться

На основе SoC, я думаю, вам нужно возвращать ошибки из ваших сервисов и при необходимости объединять их в ModelState.

Но наша цель - поддерживать развязку, а также использовать метод ModelState.Merge (). это не так?

Существует конкретная реализация , которая может помочь

0
ответ дан 2 December 2019 в 01:57
поделиться

Вы можете передать Контроллер своему методу, поскольку класс Контроллера содержит свойство ModelState. В своем методе вы можете сделать следующее:

private PlacementResult BuildResult(Controller controller)
{
   controller.ModelState.AddModelError(propertyName, errorMessage);
}

В своем действии ...

BuildResult(this);
if(ModelState.IsValid) {...
0
ответ дан 2 December 2019 в 01:57
поделиться

Ваш PlacementResult должен возвращать объект словаря или список, который вы должны объединить с состоянием модели в начале каждого действия.

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

ModelState.Merge(PlacementResult);
if(ModelState.IsValid)
{
    ...
}
1
ответ дан 2 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: