Twitter の Bootstrap テンプレートを利用して html5/Razor/MVC3 を使用しています。文書化されているように滑らかに見えるフォーム検証が必要です( http://twitter.github.com/bootstrap/#forms )。したがって、アカウント登録用の標準的なボイラープレート MVC3 がどのようになっているのかを見ると、マークアップは次のようになります。
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class="form-stacked" })) {
@Html.ValidationSummary(true, "Snap! Something went wrong")
<div>
<fieldset>
<legend>Account Information</legend>
<div class="clearfix error">
@Html.LabelFor(m => m.UserName)
<div class="input">
@Html.TextBoxFor(m => m.UserName)
<span class="help-inline">@Html.ValidationMessageFor(m => m.UserName)</span>
</div>
</div>
<div class="clearfix">
@Html.LabelFor(m => m.Email)
<div class="input">
@Html.TextBoxFor(m => m.Email)
<span class="help-inline">@Html.ValidationMessageFor(m => m.Email)</span>
</div>
</div>
<div class="clearfix">
@Html.LabelFor(m => m.Password)
<div class="input">
@Html.PasswordFor(m => m.Password)
<span class="help-inline">@Html.ValidationMessageFor(m => m.Password)</span>
</div>
</div>
<div class="clearfix">
@Html.LabelFor(m => m.ConfirmPassword)
<div class="input">
@Html.PasswordFor(m => m.ConfirmPassword)
<span class="help-inline">@Html.ValidationMessageFor(m => m.ConfirmPassword)</span>
</div>
</div>
</fieldset>
<div class="actions">
<button class="btn large primary" type="submit">Register</button>
</div>
</div>
私がやりたいことは、最初の入力でハードコーディングしたように、コンテナー div に「エラー」クラスを挿入させることです。(したがって、ページに入ると、div は「clearfix」のクラスを持ちますが、その入力ブロックが検証に失敗した場合、「clearfix エラー」としてタグ付けされます)。何らかの ID を含めるように div ブロックを更新し、おそらく ValidationMessage に新しい data- 属性を追加する必要があると思います。ValidationMessageFor ヘルパーの拡張に問題はありません。そこにあるライブラリを拡張するためのアプローチがどうあるべきか、100%確信が持てません。これにアプローチする方法について何か提案はありますか?
ティア。
更新:
このアプローチは合理的だと思います:
<div id="UserNameContainer" class="clearfix error">
@Html.LabelFor(m => m.UserName)
<div class="input">
@Html.TextBoxFor(m => m.UserName)
<span class="help-inline">@Html.ValidationMessageFor(m => m.UserName, null, new { @data_container = "UserNameContainer" })</span>
</div>
</div>
検証メッセージをデータ コンテナー名で装飾することにより、コンテナー div をターゲットにすることができます。あとは、検証メッセージをインターセプトする方法を理解する必要があります。