9

フォームのテキストボックスから取得するパラメーターの1つとしてnull許容のDateTimeを持つコントローラーアクションがあります。ユーザーがそのテキストボックスに「blah」と入力すると、DateTimeパラメーターのNull値が返され、モデルエラーが自動的に追加されることに気付きました。この場合、追加されるModelStateエラーは「値'blah'は無効です」です。

私の問題は、私のサイトが複数の言語をサポートしているため、このエラーをローカライズする必要があることです。通常、私はModelStateエラーを自分で検証して追加するだけですが、この場合はそれを取り除くことができないようです。同じテキストボックスに別のModelStateエラーを追加しても、表示されません。

4

4 に答える 4

8

あなたがこれまでに受け取ったすべての回答に、私は強く反対しなければなりません。あなたが尋ねた質問、つまりMVCエラーメッセージをローカライズする方法に実際に答えている人はいません。アプリケーションを実際にローカライズしないと、この問題の 1 つのインスタンスに対処するために多大な労力を費やしても、他の 50 の MVC エラー メッセージで同じ問題が発生する可能性があります。これらは、MVC ソース コードの Resources フォルダーにある MvcResources.resx で定義されています (または単に Reflector を使用してアセンブリを参照します)。特に、あなたが探しているのはCommon_ValueNotValidForProperty資源。.NET アプリケーションをローカライズするのと同じ方法で、ローカライズされたサテライト アセンブリを提供することで、これらのメッセージをローカライズします。.NET アプリケーションの国際化/ローカリゼーションの詳細は、この回答の範囲外ですが、このテーマに関する書籍は多数あります。MVC でこれを行うことは、ほとんどの場合、フレームワークのローカライズが既に利用可能であることを除いて、他のアプリケーションで行うことと同じです。MVC はまだベータ版なので、私の知る限り、現時点では英語のみです。おそらく、それはリリース後に変更されるでしょう。

于 2009-02-16T14:51:35.907 に答える
1

フレームワークで検証するのではなく、TryUpdateModel/Update モデルに渡すホワイトリストからその特定のテキスト ボックスを削除し、「手動で」検証します。または、ModelState エラー コレクションを反復処理し、削除したいものを見つけて削除することもできます。たとえば、削除したいものがわかったら、RemoveItem を使用します。

EDIT : デフォルトの ModelBinder を使用している場合は、独自のものを実装できます。独自のモデル エラーを生成していたため、TryUpdateModel/UpdateModel を使用していたと想定していました。

于 2009-02-14T23:01:12.590 に答える
0

DateTimeパラメーターをnull許容にすることができます。次に、何も指定されていない場合、エラーはModelStateに追加されません。

public ActionResult Method(Datetime? date)
{} 

それよりも

public ActionResult Method(Datetime date)
{}
于 2009-02-15T01:19:14.583 に答える
0

ModelState.Clear();を呼び出すことができます。アクションの開始時。しかし、各アクションでそれを行う必要があるかどうかはわかりません。

于 2009-02-14T23:13:01.673 に答える