【问题标题】:ASP.NET MVC4 Bootstrap modal validationASP.NET MVC4 Bootstrap 模式验证
【发布时间】:2015-03-12 11:21:26
【问题描述】:

我在提交表单之前在引导模式中验证用户输入时遇到问题。 我有一个具有此属性的课程

[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)

也一样,但结果是一样的。

【问题讨论】:

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


    【解决方案1】:

    表单确实会被提交。但是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

    【讨论】:

    • 谢谢,这似乎有点工作,虽然每次调用 IsFooUnique 方法时,参数 Foo 总是为空,知道为什么吗?
    • 检查您的页面,看看您是否有名称为Foo 的输入(与参数相同)。您可能有像Model.Foo 这样的前缀。在这种情况下,您应该将 [Bind(Prefix = "Model.Foo")] 添加到 IsFooUnique 操作的 Foo 参数或将操作更新为 public JsonResult IsFooUnique(Model model) 并使用 model.Foomodel.ID 进行检查。
    • 是的,就是这样。非常感谢您的帮助
    猜你喜欢
    • 2023-04-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多