2015-10-16 30 views
0

有幾個關於重定向到另一個區域的動作的問題,但沒有人回答我有更具體的問題。重定向到另一個接受模型的區域的動作

比方說,我有一個這樣的動作:

public virtual ActionResult ActioName(ViewModel model) 
{ 
    return View(model); 
} 

如果有不會是一個模型參數,你會做以下重定向到從其他地區這個動作:

return RedirectToAction("ActioName", "ControllerName", new { Area = "" }); 

我嘗試過以多種方式包括模型以及區域,但沒有奏效。我需要一種包含區域名稱和模型的方法。 謝謝。

編輯:TempData不是一個答案,我不想修改目標控制器。

+1

@markpsmith這是一個類似的問題,增加了切換區域的皺紋。既然如此,爲重複提供的答案在這裏不起作用。 – B2K

+0

您是否嘗試過'返回RedirectToAction(「ActioName」,「ControllerName」,new {Area =「」,model = model})'? – B2K

+0

我很困惑。這些答案並沒有完全解決這個問題,該問題在「另一個領域」中增加了一些以前沒有討論過的問題。這個區分很重要,我相信這個區分是一個新問題,而不是重複。 – B2K

回答

0

改爲使用RedirectToRoute,其中namedRoute提供控制器名稱和操作,而不是從URL中檢索,如默認路由一樣。

return RedirectToRoute("namedRoute",model); 

或者可能:

return RedirectToRoute("namedRoute",new { model: model }); 

或被重定向到一個區域

return RedirectToRoute("Area_namedRoute",model); 

要知道,這將觸發一個GET請求,而不是一個職位。這有一些限制需要注意的:

  1. 瀏覽器對URL的長度限制,IE是比較麻煩這裏
  2. 操作方法與[HttpPost]屬性不能被觸發這樣
  3. 將大量數據嵌入到網址中存在安全風險。如果用戶與朋友分享他們的網頁會發生什麼。
  4. 獲取請求被搜索引擎認爲沒有副作用,它們被認爲是隻讀的。

這就是說,見ASP.NET MVC: RedirectToAction with parameters to POST Action如果你需要發佈,而不是得到。

相關問題