ASP.NET MVC4 Bootstrap模态验证

时间:2015-03-12 11:21:27

标签: c# asp.net asp.net-mvc-4 unobtrusive-validation

我在表单提交之前验证bootstrap模式中的用户输入是一个问题。 我有一个有这个属性的课

[FooValidation]
[MaxLength(50)]
[Required]
public string Foo {get;set;}

foo属性必须是唯一的,这就是我创建FooValidation属性的原因,如下所示:

public class FooValidationAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        //logic
         return true;
    }
}

在我看来,我有

@Html.TextBoxFor(model => model.Foo, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Foo)

现在问题是,默认属性(Required和MaxLength)工作正常,当我尝试提交表单时,我得到了正确的错误消息,但我的自定义属性没有,调用IsValid方法并返回正确的值但无论如何都会提交表格。 知道什么可能是错的吗?

PS:我试图覆盖这个方法

ValidationResult IsValid(object value, ValidationContext validationContext)

但结果也一样。

1 个答案:

答案 0 :(得分:0)

表格确实会提交。但是ModelState.IsValid应该返回false并且您应该返回到您的视图而不更新数据:

public ActionResult SaveData(Model model)
{
    if (ModelState.IsValid)
    {
        // update here
        // then redirect to view
        return RedirectToAction("View", new { id = model.ID });
    }
    return View(model);
}

如果您想阻止发布表单,则应执行Remote验证。

在您的模型中添加:

[Remote("IsFooUnique", AdditionalFields="ID", ErrorMessage="Foo is already in use")]
[MaxLength(50)]
[Required]
public string Foo {get;set;}

这在你的控制器中:

public JsonResult IsFooUnique(int ID, string Foo)
    {
        bool isUnique = false; // ... your logic here
        return Json(isUnique, JsonRequestBehavior.AllowGet);
    }

这将在客户端验证(突兀或不引人注目),并将阻止您的表单被提交。并且还将在服务器端验证,在保存数据的控制器方法中,还将ModelState.IsValid设置为false