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

Web.config:

<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

コントローラーで ModelState.IsValid を確認する必要があります。状態が無効 (つまり false) の場合は、viewmodel をビューに返す必要があります。

このようなもの:

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

        return Json(JsonEnvelope.Succes());
    }

    return View(model);
}

投稿で言及していないその他の確認事項:

  • jquery.validate だけでなく、JQuery ライブラリも必ず含めてください。
  • 入力要素をフォーム内に配置し、フォームが投稿に設定されていることを確認してください
于 2012-05-17T18:41:52.813 に答える
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 に答える