2010-08-04 91 views
0

在我的具體示例中,我需要將一個控制器上收到的錯誤傳遞給另一個將顯示的控制器。這是我設置的一個測試案例。我試過TempData,ViewData和Session。我注意到的另一件事是,也許這就是我重定向的方式。當我在接收控制器上放置一個斷點時,如果我剛剛進入該斷點,則會觸發斷點,但在重定向時它不會點擊。如何在兩個控制器之間傳遞數據?

發送控制器動作

public ActionResult New() 
    { 
     Session["Notice"] = "There was an error"; 
     Session["NoticeClass"] = "error"; 
     return RedirectToAction("Index", "Home"); 
    } 

那麼這裏接收控制器:

public ActionResult Index() 
    { 
     //Handle action 

     return View(); 
    } 

然後局部視圖呈現出任何錯誤或通知發現

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %> 
<% 
    string Message = ""; 
    string Class = "hidden"; 
    if (ViewData["Notice"] != null && ViewData["Notice"] != "") 
    { 
     Message = (string)ViewData["Notice"]; 
     Class = (string)ViewData["NoticeClass"]; 
    } 
    if (Session["Notice"] != null && Session["Notice"] != "") 
    { 
     Message = (string)Session["Notice"]; 
     Class = (string)Session["NoticeClass"]; 
     Session["Notice"] = null; 
    } 

    Response.Write("<div class=\"" + Class + "\" id=\"error_div\"><span id=\"error_span\">" + Message + "</span></div>"); 
%> 
+0

我發現的是,我可以在接收控制器上設置TempData,Session或ViewData,但是當我設置其中任意三個值時,然後執行重定向操作,該值每次都會丟失。 – Jhorra 2010-08-04 20:46:16

回答

1

因此很明顯,有具體的關於重定向到站點的根目錄的東西。當我將重定向從/ home/index更改爲另一個操作時,它工作正常。只有當我重新引導到那個人時,我的價值纔會消失。

1

UPDATE:首先,對不起,但我仍然 不能得到一個清晰的圖片 - 假設 你想獲得的數據在一個 控制器行動傳遞給另一個 控制器的行動,然後在局部視圖中呈現 。您可以使用 會議得到的只是在你 其存儲的方式 其他控制器上的價值觀....但是TempData的,我認爲也可以在你的工作case..then重定向 -

return RedirectToAction("Action","Controller",routevalues) 

我想你應該瞭解的TempData 和可視數據更here和不 使用ViewData的,除非你已經分配 它一定的價值,我不能在你的 代碼中看到的,你仍然在使用它。每個請求

TempData的存儲值....所以一個新的請求意味着它將失去values.Have看看this如果你正在尋找通過使用TempData的值。

所以,如果你只希望傳遞一個字符串的情況下做這樣的事情 -

public ActionResult New() 
    { 
     string str = "There was an error"; 
     return RedirectToAction("Index",str); 
    } 
    public ActionResult Index(string str) 
    { 
     Response.Write(str); 
     return View(); 
    } 
+0

我實際上寫出來並將其格式化爲母版頁中使用的部分視圖。它會查找錯誤並顯示它們。 – Jhorra 2010-08-04 19:57:42

+0

另外我實際上傳遞了兩段數據。另外,我不只是傳遞給另一個動作,而是傳遞給一個完全不同的控制器。 – Jhorra 2010-08-04 19:59:06

+0

如果你正在控制器之間傳遞數據 - 我想你可能想使用會話。更明確地發佈你想要實現的內容..看看這個簡單的例子 - http://msdn.microsoft.com/en-us/library/dd394711.aspx – Vishal 2010-08-04 20:03:44

相關問題