2

ASP.NET MVC 3 アプリで目立たないフィールドのクライアント側検証を実装する方法を理解するのに助けが必要です。MVC は関連する HTML を生成するため、目立たないクライアント側の検証が基本的に有効になっていることがわかります。

この場合に達成したいのは、入力時にBugsエディターへの入力 (つまり、対応する<input>要素) を検証することです。テスト目的で、プロパティの最大長を 2 に設定しました。テストすると、それがわかります。検証は現在行われていないため、少なくとも何かが欠けています。したがって、この質問の成功基準は、Bugsフォーム フィールドのクライアント側の検証が機能していることです。

生成された HTML で考えられる問題が 1 つあります。プロパティVerboseはモデルのようにマークされていませんが、対応する属性は引き続きたとえば属性を取得しますが、 forは取得しません。目立たない検証を有効にするために、検証ルールを持つフィールドが取得する必要があるように、逆にするべきではありませんか?Required<input>dataval=true<input>Bugsdataval=true

ケースの理解に関連するコードは次のとおりです。さらに情報が必要な場合はお知らせください。

Options.cs:

public class Options
{
    [Required, StringLength(2)]
    public string Bugs;
    public bool Verbose;
}

Options.cshtml:

<script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

<div id="options-form">
  @using (Html.BeginForm())
  {
    @Html.ValidationSummary(true)
    <fieldset>
      <legend>Options</legend>
      <div class="editor-label">
        @Html.LabelFor(model => model.Bugs)
      </div>
      <div class="editor-field">
        @Html.EditorFor(model => model.Bugs)
        @Html.ValidationMessageFor(model => model.Bugs)
      </div>
      <div class="editor-label">
        @Html.LabelFor(model => model.Verbose)
      </div>
      <div class="editor-field">
        @Html.CheckBoxFor(model => model.Verbose)
        @Html.ValidationMessageFor(model => model.Verbose)
      </div>
   </fieldset>
  }
</div>

2 つのエディター ( forBugsVerbose) は次のように表示されます。

<div id="options-form">
<form action="/Options" method="post">
  <fieldset>
    <legend>Options</legend>
      <div class="editor-label">
        <label for="Bugs">Bugs</label>
      </div>
      <div class="editor-field">
        <input class="text-box single-line" id="Bugs" name="Bugs" type="text" value="" />
        <span class="field-validation-valid" data-valmsg-for="Bugs" data-valmsg-replace="true"></span>
      </div>
      <div class="editor-label">
        <label for="Verbose">Verbose</label>
      </div>
      <div class="editor-field">
        <input data-val="true" data-val-required="The Boolean field is required." id="Verbose" name="Verbose" type="checkbox" value="true" /><input name="Verbose" type="hidden" value="false" />
        <span class="field-validation-valid" data-valmsg-for="Verbose" data-valmsg-replace="true"></span>
      </div>
    </fieldset>
  </form>
</div>
4

3 に答える 3

4

BugsおよびVerboseは、プロパティではなく、このコードのパブリック フィールドです。それらをプロパティにすると、修正されるはずです。

于 2011-09-01T14:02:44.403 に答える
2

とプロパティの両方に対して と をget;定義します。これは検証を修正 (追加) するだけでなく、将来、モデル バインダーはサーバー上のフォーム フィールドからモデルをバインドできるようになります。set;BugsVerbose

の必須属性についてVerbose。これは、値の型に対して暗黙的に必須の検証が行われているためです。string は null 可能であるため、明示的に属性を設定しない場合は必要ありませんRequired。そのため、バグは必要ありません。ただし、c# の性質上、これboolはできないnullため、mvc は自動的にRequired属性を追加します。あなたはそれを制御することができます

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
于 2011-09-01T13:58:35.813 に答える
0

私は最近同じ問題を経験しました (目立たないクライアント側の検証は IE では機能しませんでしたが、他のブラウザーでは機能しました)。その理由はjQueryのバージョンにありました。jQuery 1.6.x バージョンからバージョン 1.5.2 にロールバックすると、機能し始めました。

于 2011-09-01T13:58:58.777 に答える