ASP.NET MVC 3 アプリで目立たないフィールドのクライアント側検証を実装する方法を理解するのに助けが必要です。MVC は関連する HTML を生成するため、目立たないクライアント側の検証が基本的に有効になっていることがわかります。
この場合に達成したいのは、入力時にBugs
エディターへの入力 (つまり、対応する<input>
要素) を検証することです。テスト目的で、プロパティの最大長を 2 に設定しました。テストすると、それがわかります。検証は現在行われていないため、少なくとも何かが欠けています。したがって、この質問の成功基準は、Bugs
フォーム フィールドのクライアント側の検証が機能していることです。
生成された HTML で考えられる問題が 1 つあります。プロパティVerbose
はモデルのようにマークされていませんが、対応する属性は引き続きたとえば属性を取得しますが、 forは取得しません。目立たない検証を有効にするために、検証ルールを持つフィールドが取得する必要があるように、逆にするべきではありませんか?Required
<input>
dataval=true
<input>
Bugs
dataval=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 つのエディター ( forBugs
とVerbose
) は次のように表示されます。
<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>