2010-08-31 42 views
1

我正在使用asp.net mvc。我有4頁顯示事件列表(不同類型的事件)和每個頁面上的「詳細信息」鏈接導致「EventDescription.aspx」視圖。在Controller中獲取視圖名稱,ASP.NET MVC

「EventDescription.aspx」有一個名爲「回到事件」的鏈接,它必須將用戶帶到適當的頁面。例如:如果「Details」請求來自page1,「Back to Events」鏈接需要指向page1.aspx。 page2.aspx,page3.aspx,page4.aspx相同。

我的計劃是捕獲控制器操作「EventDescription」中的視圖名稱(page1.aspx)並存儲在ViewData中,然後顯示「EventDescription.aspx」並將用戶的ViewData值設置爲「Back to Events」鏈接。

如何獲取請求來自Action內部的View的名稱?

提前致謝。

回答

0

我建議您使用TempData而不是ViewData。例如,你可以有這樣的設置。

public ActionResult Details(int id) 
{ 
    var event = repository.GetByID(id); 
    if (event != null) 
    { 
     TempData["ReturnPath"] = Request.UrlReferrer.ToString(); 
     return View(event); 
    } 
    else { //....... ; } 
} 

而在你查看你可以有一個普通的ActionLink像這樣

<% =Html.ActionLink("Back To Events", TempData["ReturnPath"]) %> 

如果要幹,你也可以在你的控制器創建操作方法只是爲了處理重定向像這樣。

public ActionResult GoBack() 
{ 
    return Redirect(TempData["ReturnPath"]); 
} 

而在你觀看正常的ActionLink像這樣

<% =Html.ActionLink("Back To Events", "GoBack") %> 
2

當您渲染頁面時,您還需要渲染一個指向正確頁面的鏈接,當點擊返回事件時。這最好在控制器方法中設置,您可以隨時訪問所有必要的信息。

一個簡單的方法是將返回鏈接信息放入ViewData變量
(未測試的僞代碼如下)。在你的控制器的方法:

ViewData["ReturnPath"] = "/Content/Page/1"; 

然後在您的視圖:

<% =Html.ActionLink("Back To Events", ViewData["ReturnPath"]) %> 

或類似的東西。


或者,你可以嘗試像

ViewContext.RouteData.Values["action"] 

...如果你不介意的神奇字符串那裏。這會給你打電話的動作。

+0

這樣,我將不得不在4種動作方法(4頁)的地方。我認爲最好在Action方法中的一個地方接收顯示eventDescription.I的請求。使用<%= Html.ActionLink(「Back to Events」,「EventList」)%>來生成鏈接,只需要視圖名稱是足夠的,因爲我的所有操作方法名稱都反映了視圖名稱。 – fireBand 2010-08-31 16:16:01

1

,如果你只是想獲得你來自哪裏,你來可以在你的行動

ViewData["ReturnPath"] = this.Request.UrlReferrer.AbsolutePath; 

這個給你,你來自的頁面的URL做到這一點的URL。如果你從Page1那麼你去EventDescription。在您的EventDescription Action中,您的ReturnPath ViewData具有Page1的Url。或相反亦然。

相關問題