2012-02-09 37 views
0

我有一個MVC3 C#.Net網絡應用程序。具有Excel功能的導入。此功能在Rate控制器的Import方法中執行。它在費率/導入視圖中查看。導入時,一些行是成功的,有些則不行。我正在將錯誤收集到一個字符串[]數組中。如果一個或多個行成功導入,則導入會被視爲成功,因此應用會導航回「建議編輯」視圖。我想將信息錯誤傳遞迴「建議編輯」視圖進行顯示。任何ides如何做到這一點?MVC3從一個控制器傳遞消息到另一個視圖和/或控制器

+0

通過「應用程序導航回的議案編輯」你的意思是表單提交後,你正在做一個重定向?如果是這樣,您將能夠存儲信息的唯一位置是在數據庫中(將ID傳遞給其他控制器以查找字符串),在會話中或cookie中。 ViewBag/ViewData生命週期以請求的生命週期結束。重定向會從瀏覽器創建一個新的「請求」。 – 2012-02-09 16:48:17

回答

3

有幾種方法。

TempData的

這是在您的控制器使用。 TempData在單個重定向中持續存在。

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:"); 

,這會使得這個網站。該類是由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 2012-02-13 15:14:48

+0

@MikeTWebb是的,最後一行,'@ Html.ValidationSummary(「以下行錯誤發生:」);'是什麼顯示在ModelState中的任何錯誤。更新我的答案與呈現出來的東西。 – Leniency 2012-02-16 23:47:14

相關問題