MVC 中的数据验证不起作用
本文关键字:验证 不起作用 数据 MVC | 更新日期: 2023-09-27 18:34:26
我正在尝试使用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; }
网络配置:
<appSettings>
<add key="Location" value="Test"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
视图:
<script src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js"></script>
<div>
<%= Html.TextBoxFor(c => c.CompanyName, new { style = "width:300px"})%>
<%=Html.ValidationMessageFor (c=>c.CompanyName) %>
</div>
如果我将公司名称留空并尝试保存页面,则看不到任何错误。另外,我在页面源代码中看到以下内容:
<div>
<input id="CompanyName" maxlength="40" name="CompanyName" style="width:300px" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="CompanyName" data-valmsg-replace="true"></span>
有人可以告诉我我错过了什么吗?
编辑:以下是控制器操作:
[HttpPost]
public ActionResult Save(EmailModel model)
{
if (ModelState.IsValid)
{
Helper.Save(model);
return Json(JsonEnvelope.Succes());
}
return View(model);
}
您需要
在控制器中检查ModelState.IsValid。如果状态无效(因此为 false),则应将视图模型返回到视图。
像这样:
[HttpPost]
public ActionResult Save(EmailModel model)
{
if (ModelState.IsValid)
{
Helper.Save(model);
return Json(JsonEnvelope.Succes());
}
return View(model);
}
其他一些您在帖子中未提及的检查事项:
- 确保你也包含JQuery库,而不仅仅是jquery.validate。
- 确保将输入元素放置在表单中,并且表单设置为发布
这
听起来很奇怪,但它对我有用,像这样更改验证行的顺序:
[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")]
我不记得为什么,我认为这是一个错误 试着告诉我们;)