Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC4引导模式验证_C#_Asp.net_Asp.net Mvc 4_Unobtrusive Validation - Fatal编程技术网

C# ASP.NET MVC4引导模式验证

C# ASP.NET MVC4引导模式验证,c#,asp.net,asp.net-mvc-4,unobtrusive-validation,C#,Asp.net,Asp.net Mvc 4,Unobtrusive Validation,我在提交表单之前验证引导模式中的用户输入时遇到问题。 我有一个具有此属性的类 [FooValidation] [MaxLength(50)] [Required] public string Foo {get;set;} foo属性必须是唯一的,因此我创建了FooValidation属性,如下所示: public class FooValidationAttribute : ValidationAttribute { public override bool IsValid(objec

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

[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("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

谢谢,这似乎在某种程度上起作用,尽管每次调用isfooinuque方法时,参数Foo始终为null,知道为什么吗?检查您的页面,看看是否有名为
Foo
(与参数相同)的输入。您可能有一个前缀,如
Model.Foo
。在这种情况下,您应该将[Bind(Prefix=“Model.Foo”)]添加到isfoouunique操作的Foo参数中,或者将操作更新为
public JsonResult isfoouunique(Model Model)
,并使用
Model.Foo
Model.ID
进行检查。是的。非常感谢你的帮助