C# MVC中的数据验证不起作用
我试图在我的MVC应用程序中使用不引人注目的js执行现场验证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
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的基类(参见我更新的示例)。