繁体   English   中英

ASP.NET MVC4引导程序模式验证

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM