私の見解では、フィールドにエラーがある場合は赤くハイライトするようにフィールドを設定する必要があります。Controller からエラーのあるフィールドのリストを渡し、一致する場合は、条件付きでクラスを errorField に設定します。
<td>@(cssClass = errorFields.Contains("Field1") ? "errorField" : "") <input type="text" id="field1" name="field1" value="@form.Field1" class="@cssClass" style="width: 5em;" /></td>
これはクラス値を設定するために機能しますが、問題は次のようにレンダリングすることでもあります。
<td>errorField <input...>
明らかに、そこに errorField をレンダリングしたくありません。この動作を防ぐにはどうすればよいですか? 非表示の div でラップすることもできますが、それはそれを修正するためのハックな方法にすぎないように感じます (確かに、条件付き CSS の処理方法はそもそもハックかもしれません)。
編集:
Davidの答えに基づいて、これが私がそれを処理する方法です:
モデルに List ErrorFields プロパティを追加しました。また、異なるフィールドを処理することを除いて、Davidが提供したのと基本的に同じメソッドを追加しました。それは次のとおりです。
public string ErrorCode(string field)
{
return ErrorFields.Contains(field) ? "errorField" : "");
}
コントローラーは、エラー フィールドを ViewBag に渡す代わりに、モデル内の ErrorFields に渡します。
ビューでは、基本的に David が与えたように:
class="@form.ErrorCode("Field1")"
そして、それは適切に機能します。