DropDownListFor の検証に関して、同様の質問と回答が多数見られましたが、特定の問題は見られませんでした。
これは私のhtmlヘルパーです。
VB:
@Html.DropDownListFor(Function(Model) Model.AccLev, New SelectList(Model.Items), "Select an Accuracy Level", New With {.class = "form-control"})
C#:
@Html.DropDownListFor(Model => Model.AccLev, new SelectList(Model.Items), "Select an Accuracy Level", new { @class = "form-control" })
このヘルパーは、ドロップダウンの選択が行われていない場合に問題なく検証し、検証メッセージを表示しますが、同じ「フォーム コントロール」クラスを使用する他の TextBoxFor() ヘルパーのように、フィールド自体は赤い境界線に変わりません。
これは CSS スタイルの問題に違いありませんが、問題を見つけるためにどこを見ればよいかわかりません。bootstrap.css および site.css ファイルを確認しましたが、どちらにも異常はありません。
編集:
以下は、ビュー内のテーブル行内で Html ヘルパーがどのようにネストされているかを示しています。
<tr>
<td>
<div class="editor-label">
@Html.LabelFor(Function(Model) Model.AccLev)
</div>
<div class="editor-field">
@Html.DropDownListFor(Function(Model) Model.AccLev, New SelectList(Model.Items), "Select an Accuracy Level", New With {.class = "form-control"})
@Html.ValidationMessageFor(Function(Model) model.AccLev)
</div>
</td>
<td>
<div class="editor-label">
@Html.LabelFor(Function(Model) Model.Units)
</div>
<div class="editor-field">
@Html.TextBoxFor(Function(Model) Model.Units, New With {.class = "form-control"})
@Html.ValidationMessageFor(Function(Model) model.Units)
</div>
</td>
</tr>
当然、テーブルはフォーム内にあります。そうしないと、Html ヘルパーを使用できません。@Html.DropDownListFor() ヘルパーは、私が問題を抱えているものです。前に述べたように、フォーム コントロール クラスを使用したこのヘルパーの検証は正常に機能しますが、選択が行われていない場合、ドロップダウン リスト フィールドは本来のように赤くなりません。@Html.TextBoxFor() ヘルパーは同じフォーム コントロール クラスを使用していますが、検証して色を赤に変更します。
「has-error」クラスを使用することが提案されていますが、以下のスニペットが示すように、これはすでに bootstrap.css 内に実装されています。
.has-error .form-control { border-color: #b94a48;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
私が抱えている混乱は、フォーム コントロール クラスが TextBoxFor Html ヘルパーでは機能するのに、DropDownListFor ヘルパーでは機能しないのはなぜですか?
これら 2 つのヘルパーの出力は次のようになります。