Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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# MVC中的数据验证不起作用_C#_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# MVC中的数据验证不起作用

C# MVC中的数据验证不起作用,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我试图在我的MVC应用程序中使用不引人注目的js执行现场验证 I have the following in the ViewModel: [DataMember(EmitDefaultValue = false)] [Required(ErrorMessage="CompanyName is Required")] [StringLength(40, ErrorMessage = "Must be under 40 characters")] public s

我试图在我的MVC应用程序中使用不引人注目的js执行现场验证

I have the following in the ViewModel:

    [DataMember(EmitDefaultValue = false)]
    [Required(ErrorMessage="CompanyName is Required")]
    [StringLength(40, ErrorMessage = "Must be under 40 characters")]
    public string CompanyName { get; set; }
Web.config:

<appSettings>
    <add key="Location" value="Test"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

您需要在控制器中检查ModelState.IsValid。如果状态无效(因此为false),则应将viewmodel返回到视图

大概是这样的:

[HttpPost]
public ActionResult Save(EmailModel model)
{
    if (ModelState.IsValid)
    {
        Helper.Save(model);

        return Json(JsonEnvelope.Succes());
    }

    return View(model);
}
[DataMember(EmitDefaultValue = false)] 
[StringLength(40, ErrorMessage = "Must be under 40 characters")]
[Required(ErrorMessage="CompanyName is Required")]
[Required(ErrorMessage="CompanyName is Required")]
[DataMember(EmitDefaultValue = false)] 
[StringLength(40, ErrorMessage = "Must be under 40 characters")]
还有一些你在帖子中没有提到的事情需要检查:

  • 确保还包括JQuery库,而不仅仅是JQuery.validate
  • 确保将输入元素放置在表单中,并且表单设置为post

这听起来很奇怪,但对我来说很有效,更改验证行的顺序如下:

[HttpPost]
public ActionResult Save(EmailModel model)
{
    if (ModelState.IsValid)
    {
        Helper.Save(model);

        return Json(JsonEnvelope.Succes());
    }

    return View(model);
}
[DataMember(EmitDefaultValue = false)] 
[StringLength(40, ErrorMessage = "Must be under 40 characters")]
[Required(ErrorMessage="CompanyName is Required")]
[Required(ErrorMessage="CompanyName is Required")]
[DataMember(EmitDefaultValue = false)] 
[StringLength(40, ErrorMessage = "Must be under 40 characters")]
或者像这样:

[HttpPost]
public ActionResult Save(EmailModel model)
{
    if (ModelState.IsValid)
    {
        Helper.Save(model);

        return Json(JsonEnvelope.Succes());
    }

    return View(model);
}
[DataMember(EmitDefaultValue = false)] 
[StringLength(40, ErrorMessage = "Must be under 40 characters")]
[Required(ErrorMessage="CompanyName is Required")]
[Required(ErrorMessage="CompanyName is Required")]
[DataMember(EmitDefaultValue = false)] 
[StringLength(40, ErrorMessage = "Must be under 40 characters")]

我不记得为什么了,我想这是一个错误,试着告诉我们;)

你能展示你的httppost操作方法吗?你的输入是在
表单中吗?我在您的代码示例中没有看到任何
标记。@esker:是的。我没有粘贴整个代码,可能是因为它是一个双柱,而且它并没有显示太多的研究成果(这东西很容易被谷歌发现,答案也已经在上一个主题中多次给出)。请考虑给那些试图帮助你的人1。我实际上是在返回一个JSORESREST。请看我的编辑上面。谢谢。是的,我包括jQuery库,所有的输入元素都在一个设置为POST的表单中。当EmailModel无效时,您需要将它返回到它来自的视图中。否则,您将JSON返回到您喜欢的任何视图。但是,我会得到一个错误:“无法将类型System.Web.mvc.ViewResult隐式转换为System.Web.mvc.jsonresult”是的,这是因为您的方法具有返回jsonresult的签名。您应该将其设置为ActionResult,JsonResult的基类(参见我更新的示例)。