ASP.Net MVC3 - 自定义模型绑定,默认模型绑定器,值类型和[Required]属性

时间:2011-12-17 03:17:31

标签: asp.net-mvc data-annotations model-binding

我的操作采用了一个由默认模型绑定器绑定的类属性:

public ActionResult MyControllerAction(MyModelClass model) { ...

该类使用几种非标准值类型,例如MongoDB的ObjectId值类型,它当然是不可为空的。

如果我为ObjectId类型创建一个自定义模型绑定器(很容易做到)并将其添加到Application_Start中,如下所示:

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

...默认模型绑定器会忽略它,它似乎只适用于作为参数直接传递给操作的模型值。

除此之外,我似乎无法获得[Required]属性来识别未提供的默认(未指定)值。

所以在坚果壳中:

  • 如何使用默认的模型绑定器来使用已注册的自定义模型绑定器来解析模型的属性?
  • 如何让[Required]将该属性的default值识别为未指定?

或者 - 是否已经有一些已经可以处理所有这些的东西,我可以在我的项目中下载和使用它?

1 个答案:

答案 0 :(得分:0)

好的,已经弄清楚了:

  • DefaultModelBinder 使用任何指定的自定义模型绑定器,但仅当在提交的值中实际指定了值时
  • [Required]属性基本上是“not null”的简写,因此如果将属性指定为可空,则可以正常工作,即在我的情况下,如果没有值,ObjectId?会使属性跳闸指定。

以下是我发现的一篇很好的博客文章,其中解释了一些内容:http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html