在MVC4控制器操作中,如何仅在传入模型时验证模型?

时间:2014-02-05 10:57:47

标签: c# .net asp.net-mvc asp.net-mvc-4 model-binding

我有一个班级......

public class TestClass
{
    [DataMember(IsRequired = true)]
    [Required]
    public string Test { get; set; }
    [DataMember(IsRequired = true)]
    [Required]
    public string Test2 { get; set; }
}

我基本上是试图通过我的控制器动作实现这一点..

public ActionResult Index(string value1, string value2, TestClass testClass)
{
    if (testClass != null && !ModelState.IsValid)
    {
        //return validation errors
    }
    //continue processing

然而,由于MVC模型绑定,TestClass不是null,因此它实例化了包含nullTest字符串的Test2属性,转动强制它检查ModelState.IsValid,这当然是假的。

有人可以指出我出错的地方或提出更好的选择吗?

EDIT。

我正在检查null,因为要求是必须将value1value2传递到系统,然后TestClass包含有关所提供内容的额外信息。不需要额外的信息,但是需要提供它才需要进行验证。

1 个答案:

答案 0 :(得分:0)

我认为唯一的解决方案是使用自定义模型绑定(实现IModelBinder)。

这使您可以完全访问对象的反序列化。

请参阅this article上的MSDNaction filter中的图7:

或许您可以使用{{3}}介入(参见处理验证错误一节)。