0

我正在尝试在我的 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>

如果我将 CompanyName 留空并尝试保存页面,我不会看到任何错误。另外,我在页面源代码中看到以下内容:

<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);
}
4

2 回答 2

0

这听起来很奇怪,但它对我有用,改变验证行的顺序,如下所示:

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

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

于 2012-05-18T18:29:25.777 回答
0

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

像这样的东西:

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

        return Json(JsonEnvelope.Succes());
    }

    return View(model);
}

检查您在帖子中未提及的其他一些事项:

  • 确保您也包含 JQuery 库,而不仅仅是 jquery.validate。
  • 确保将输入元素放置在表单中,并且表单设置为发布
于 2012-05-17T18:41:52.813 回答