1

私の見解では、フィールドにエラーがある場合は赤くハイライトするようにフィールドを設定する必要があります。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")"

そして、それは適切に機能します。

4

1 に答える 1

1

ビューでこれを行うのではなく、モデルでこれを行います。

あなたの場合ErrorClass、モデル(または同様の名前のもの)にプロパティを持つことができます。このようなもの:

public string ErrorClass
{
    get
    {
        return errorFields.Contains("Field1") ? "errorField" : string.Empty;
    }
}

次に、ビューでプロパティにバインドします。

class="@Model.ErrorClass"

モデルについて詳しく知らなければ、これ以上具体的に説明することはできません。この場合、複数のクラスが存在する可能性があります。これは、何らかのコレクションを要求するか、親モデルにコレクションがあるサブモデルにエラー インジケーターを配置する可能性があります。また、探しているものを実現できる、より単純な組み込みの検証機能がある可能性もあります (おそらくこの場合も可能性があります)。

ポイントは、一般に、ビューで次のような構成を実行しようとするときです。

var something = "a value";

次に、ビューを誤って使用している可能性が高く、代わりにそれをモデルに入れる必要があります。

于 2013-06-12T17:10:58.380 に答える