1

電子メールを送信する前に、いくつかの検証を行っているフォームがあります。

メソッドValidateInputが入力に応じてModelStateを設定する検証にこれを使用してみました:

[HttpPost]
public ActionResult Create(FormCollection collection)
{
    ValidateInput(collection);
    if (ModelState.IsValid == false) return View(collection);

何かが無効な場合、これにより、入力されたすべてのフィールドがクリアされます。フィールドに入力したすべてのデータを保持したい。どうやってやるの?

4

3 に答える 3

6

フォームまたは通常の HTML タグの入力フィールドに Html ヘルパーを使用していますか?

<%: Html.TextBoxFor(x => x.Message) %> - original value will be kept
<input type="text" name="Message" /> - original value will be lost after postback

また、独自の検証方法を使用する代わりに、組み込みの検証 (データ注釈属性を使用) を使用することでメリットが得られます。

于 2010-08-14T21:34:15.513 に答える
1

私の知る限り、 Create メソッドで ValidateInput を自分で呼び出す必要はありません。フレームワークはすでに ModelState を設定しているため、最初の行を削除するだけです。

于 2010-08-14T17:36:29.250 に答える
0

このシナリオでプロパティをワイプしないように ValidateInput メソッドを変更できない場合は、フォーム データの 2 つのコピーが必要になります。
FormCollection オブジェクトに依存するよりも、アクション ビューに特定のビュー モデルを使用する方がよい場合があります。そうすれば、モデル バインディングを使用してデータを取得できます。
以下のコードは機能すると思いますが、テストする機会がなかったので注意してください!

[HttpPost]
public ActionResult Create(MyCreateViewModel collection)
{
    MyCreateViewModel myCVM = new MyCreateViewModel();
    TryUpdateModel(myCVM);
    ValidateInput(myCVM);
    if (ModelState.IsValid == false) return View(collection);
于 2010-08-14T17:37:41.510 に答える