2012-02-09 15 views
0

私はMVC3 C#.Net Webアプリケーションを持っています。 Excel機能からのインポートがあります。この機能は、RateコントローラのImportメソッドで実行されます。レート/インポートビューで表示されます。インポート時には、一部の行は正常に実行され、一部は正常に実行されません。私は文字列[]配列にエラーを集めています。 1つ以上の行が正常にインポートされた場合、インポートは成功したものとみなされます。したがって、アプリケーションはプロポーザル編集ビューに戻るようにナビゲートします。情報エラーをプロポーザル編集ビューに戻して表示したいと考えています。どのようにこれを行うには?MVC3があるコントローラから別のビューやコントローラにメッセージを渡す

+0

「アプリがプロポーザル編集に戻る」とは、フォームの送信後にリダイレクトを行っているということですか?そうであれば、情報を格納できる唯一の場所はデータベースにあります(IDを他のコントローラーに渡して文字列を検索する)、セッション中またはクッキー内にあります。 ViewBag/ViewDataのライフサイクルは、リクエストの有効期限で終了します。リダイレクトは、ブラウザから新しい「リクエスト」を作成します。 –

答えて

3

いくつかの方法があります。

TempDataを

これはあなたのコントローラで利用可能です。 TempDataは、1回のリダイレクトにわたって保持されます。

public ActionResult Process() 
{ 
    // ... Process your rows, get array of errors back ... 

    TempData["errors"] = errors; 
    return RedirectToAction("Edit"); 
} 

public ActionResult Edit() 
{ 
    var errors = (IEnumerable<string>)TempData["errors"]; // Get the errors back. 
    return View(errors); // Pass into the view 
} 

にModelState

あなたは直接にModelStateにこれらのエラーを追加し、編集フォームを再表示することができます。リダイレクトを超えても持続しません。

public ActionResult Process() 
{ 
    // ... Process your rows, get array of errors back ... 

    for(var i = 0; i < errors.Length; i++) 
    { 
     ModelState.AddModelError("row" + i, errors[i]); 
    } 

    // Can't redirect here - ModelState doesn't persist. 
    return View("Edit"); 
} 

次に、あなたの編集ビューでは、単に検証の概要を表示します。

@Html.ValidationSummary("The following row errors occured:"); 

これは、このHTMLをレンダリングします。クラスは、MVCによって設定されたデフォルトのクラスです。

<div class="validation-summary-errors"> 
    <span>The following row errors occured:</span> 
    <ul> 
     <li>...Error 1...</li> 
     ... Other errors ... 
    </ul> 
</div> 
+0

@leniency ....ありがとうございます。いい物! ModelStateに関する質問.... ModelStateはどのようにエラーを表示しますか?編集ビューにコードを追加する必要がありますか?ありがとう – MikeTWebb

+0

@MikeTWebbはい、最後の行、 '@ Html.ValidationSummary("次の行のエラーが発生しました: ");'は、ModelStateのエラーを表示します。私の答えはレンダリングされたもので更新されました。 – Leniency

関連する問題