[英]ASP.NET MVC4 Bootstrap modal validation
我在提交表单之前验证引导程序模式下的用户输入时遇到问题。 我有一个与此属性有关的课程
[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)
同样,但结果是相同的。
该表格确实会提交。 但是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);
}
这将在客户端中进行验证(强制性或非强制性),并且将阻止您提交表单。 并且还将在服务器端通过保存数据的controller方法进行验证,并将ModelState.IsValid
设置为false
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.