2013-01-22 82 views
1

頁「從哪裏來」我有兩個不同的頁面,從中用戶可以將「細節」鏈接點擊進入詳細信息頁面的一個好辦法。什麼是創建一個後退按鈕不同

在詳細信息頁面,我有一個「返回」按鈕,從而導致用戶對原始頁面,是當然的兩個原始頁面。

還有一個額外的問題:在返回鏈接之一,我必須指定一個額外的匿名對象。

我的視圖代碼現在的問題是:

@{ 
    MvcHtmlString backLink = null; 
    if (Model.ReturnPage == MatchResultReturnPage.Search) 
    { 
     backLink = Html.ActionLink("GoBack", "Search", new {search = true}); 
    } 
    else 
    { 
     backLink = Html.ActionLink("GoBack", "Dashboard"); 
    } 
} 

在控制器我現在看在url.referrer如果它包含「儀表盤」,然後我設置Model.ReturnPage爲「儀表盤」。

有沒有更乾淨的方式做到這一點?

回答

2

ReturnLink作爲模型中的一個屬性,並將其設置在控制器內,這將緩解需要你把這種邏輯在視圖中。

+0

我喜歡創建在控制器中的反向鏈接的想法,但如何從訪問'Html'('HtmlHelper')控制器? – Michel

+0

使用'Url.Action(「ActionName」,「ControllerName」,新{參數=參數});'控制器,而不是'HtmlHelper' – mattytommo

+0

嗨,這給了我只與路徑的字符串,是正確的? 「Html.ActionLink」給了我一個完整的A鏈接。我嘗試使用'Html.ActionLink'與控制器的路徑,但我必須爲'Html.ActionLink'提供一個actionname。這是否意味着我必須自己創建一個鏈接? – Michel

0

你應該完全用JavaScript實現Back按鈕。
使用history object

<a href=」javascript:history.back()」> [Back]</a> 
+0

除非頁面在新標籤頁/窗口中打開。 –

+0

這可能會錯過當前不在頁面中的'new {search = true}'部分。 – Michel

1

當然,還有更簡潔的方式,但你的代碼,目前,這是很容易理解你正在嘗試做的。

我想說保持原樣,只是把#地區的包裝它周圍,隱藏它,當你不需要用它的工作:

#region get referrer page 
MvcHtmlString backLink = null; 
if (Model.ReturnPage == MatchResultReturnPage.Search) 
{ 
    backLink = Html.ActionLink("GoBack", "Search", new {search = true}); 
} 
else 
{ 
    backLink = Html.ActionLink("GoBack", "Dashboard"); 
} 
#region 

我建議的唯一的事情就是在Controller中進行此檢查,而不是視圖,並將檢查結果放在模型屬性或ViewBag中。

要訪問助手在你的控制器,請執行以下操作:

var URL = new UrlHelper(this.Request.RequestContext).Action("MyAction", "MyController", new { id = 123 }); 
+0

我喜歡關於在控制器中創建反向鏈接的想法,但是如何從控制器訪問'Html'('HtmlHelper')? – Michel

+0

像這樣:var URL = new UrlHelper(this.Request.RequestContext).Action(「MyAction」,「MyController」,new {id = 123}); –

相關問題