89

ユーザーがローカル ファイル システムから選択した画像をアップロードしている状況があります。私の見解では、私のフォームには基本的に2つの送信ボタンがあります。1 つは通常どおりフォームを送信するために使用され、すべての検証が実行されます。2 つ目は、画像をアップロードするためだけのものです。この場合、まだ検証したくありません。

「画像のアップロード」送信ボタンに「style-name cancel」のクラス値を与えることで、クライアント側の検証をオフにすることができたので、

<input type="submit" name="UploadImageButton" value="Upload Image" class="style-name cancel" /> 

ここで、ポストバックすると、モデルに UploadImageButton プロパティがあり、このボタンをクリックすると、このプロパティが入力されます (入力の名前がプロパティと一致します)。このようにして、フォームが実際の [送信] ボタンによって送信されたのか、UploadImageButton によって送信されたのかがわかります。

私の質問はこれです... サーバー側の検証をオフにするにはどうすればよいですか? ユーザーがこのボタンをクリックしたときに、検証の概要情報が表示されないようにします。これを使用してカスタムモデルエラーを追加できることを知っています

ModelState.AddModelError("{key}", "{error msg}");

モデル エラーを削除する手段を探しています。これは可能ですか?

編集:

これが私が思いついたものです:

foreach (var key in ModelState.Keys.ToList().Where(key => ModelState.ContainsKey(key))) {
     //ModelState.Remove(key); //This was my solution before
     ModelState[key].Errors.Clear(); //This is my new solution. Thanks bbak
}
4

5 に答える 5

157

次のようにして、モデル エラーを削除できます。

if (ModelState.ContainsKey("{key}"))
    ModelState["{key}"].Errors.Clear();
于 2011-09-14T23:30:55.637 に答える
71

これは以前の回答に基づいていますが、もう少し単純化しています。

foreach (var modelValue in ModelState.Values)
{
    modelValue.Errors.Clear();
}
于 2012-04-14T21:47:21.267 に答える
7

私は時々それを使用するので、それから拡張メソッドを作成しました:

public static ModelStateDictionary ClearError(this ModelStateDictionary m, string fieldName)
{
    if (m.ContainsKey(fieldName))
        m[fieldName].Errors.Clear();
    return m;
}

複数のフィールドのエラーをクリアするために流暢に使用できます。

于 2014-06-01T22:34:24.060 に答える