ASP.NET MVC4 Bootstrap 模态验证
ASP.NET MVC4 Bootstrap modal validation
我在提交表单之前验证 bootstrap 模态中的用户输入时遇到问题。
我有一个 class 这个 属性
[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 方法被调用并且 returns 正确的值,但无论如何都会提交表单。
知道哪里出了问题吗?
PS: 我试图覆盖这个方法
ValidationResult IsValid(object value, ValidationContext validationContext)
也是,但结果是一样的。
表单确实会被提交。但是 ModelState.IsValid
应该 return false
并且您应该 return 在不更新数据的情况下查看:
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
。
我在提交表单之前验证 bootstrap 模态中的用户输入时遇到问题。 我有一个 class 这个 属性
[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 方法被调用并且 returns 正确的值,但无论如何都会提交表单。 知道哪里出了问题吗?
PS: 我试图覆盖这个方法
ValidationResult IsValid(object value, ValidationContext validationContext)
也是,但结果是一样的。
表单确实会被提交。但是 ModelState.IsValid
应该 return false
并且您应该 return 在不更新数据的情况下查看:
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
。