ASP.Net MVC3 - привязка пользовательской модели, привязка модели по умолчанию, типы значений и атрибут [Required] - PullRequest
0 голосов
/ 17 декабря 2011

Мое действие принимает свойство класса, которое связано с подшивкой модели по умолчанию:

public ActionResult MyControllerAction(MyModelClass model) { ...

Класс использует несколько нестандартных типов значений, таких как ObjectId тип значения MongoDB, который, конечно, не обнуляется.

Если я создаю привязку пользовательской модели для типа ObjectId (достаточно легко сделать) и добавляю ее в Application_Start следующим образом:

ModelBinders.Binders.Add(typeof(ObjectId), new ObjectIdModelBinder());

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

Кроме того, я не могу получить атрибут [Required] для распознавания значения по умолчанию (не указано) как не предоставленного.

Так в скорлупе ореха:

  • Как получить привязку модели по умолчанию для использования зарегистрированных пользовательских привязок модели для анализа свойств модели?
  • Как мне получить [Required] для распознавания значения default этого свойства как не указанного?

Или - уже есть что-то, что уже обрабатывает все это, что я могу загрузить и использовать в моем проекте?

1 Ответ

0 голосов
/ 17 декабря 2011

Ладно, разобрался уже:

  • DefaultModelBinder использует любые указанные пользовательские привязки модели, но только если значение действительно указано в переданных значениях
  • Атрибут [Required] по сути является сокращением для «not null», и поэтому работает, если свойство указано как nullable, т.е. в моем случае, ObjectId? отключит атрибут, если не указано значение. *

Вот хороший пост в блоге, который я нашел, который объясняет некоторые вещи: http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

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