2009-01-30 93 views
9

比方說,我有一個控制器操作,用於從用戶的購物籃中刪除項目。此控制器操作是通過對url〜/ delete/{id}執行POST來觸發的。如果我的應用程序中有多個頁面將發佈到此網址,那麼我如何構建控制器操作以重定向回發佈到它的頁面?如何重定向到ASP.NET MVC中的調用頁面?

回答

0

我從來沒有嘗試過,但是您可以使用Referer標頭來知道帖子或來源的來源,並嘗試將網址與路線進行匹配。

11

您應該從發佈頁面提供RedirectToUrl參數。

依靠引用標頭並不是一個好習慣。

相反,做這樣的事情:

public ActionResult Delete(int id, string RedirectToUrl) 
{ 
    // check if RedirectToUrl is null or empty and redirect accordingly 
} 

有關消息視圖或局部視圖中,您可以通過多種方式提供參數:

<%= Html.Hidden("RedirecToUrl","/my/lovely/url") %> 

<form action="/item/delete/22?RedirectToUrl=/my/lovely/url"> 

我我更喜歡第一個選項。

+0

大多數統計系統依賴Referer標頭知道在哪裏請求來自。這是不可靠的,但如果我必須選擇更改網站中的每個鏈接,並依靠referer頭部重定向,我會選擇最後一個,或者按照tvanfosson的建議做一些ajax actionlink。 – 2009-01-30 12:41:31

2

我會做的第一件事就是使用Ajax.ActionLink,然後如果用戶啓用了Javascript,則永遠不會離開頁面。這是最好的解決方案。如果你不想要鏈接,你也可以使用Ajax表單。其中任何一個都可以使用DELETE或POST方法。

爲了處理Javascript被關閉的情況,當您在控制器中檢測到POST沒有通過Ajax完成(Request.IsAjaxRequest爲false)時,您可以查看Request.UrlReferer屬性以獲取推介頁面的網址。如果不爲null,則可以使用RedirectResult返回此頁面。如果它爲空,請選擇默認的着陸頁 - 可能類似於「您的商品已被刪除,請點擊此處繼續購物」。後者可能只會很少受到打擊。

0

只需使用URL Referer [原文如此]頭。

var requestFrom = Request.UrlReferrer 

您可以找到的文檔:http://msdn.microsoft.com/en-us/library/system.web.httprequest.urlreferrer.aspx

唯一的一次,這是行不通的網頁時直接要求,但在這種情況下,你不會有任何地方重定向到不管怎麼說。

也可以選擇使用AJAX做唯一的異步操作,以便您的Delete操作僅執行所描述的操作,並且不負責執行超出其預期刪除目的的操作。

0

如果您使用WCSF(Web客戶端軟件工廠)實現MVC模式,則可以使用PageFlow執行所有導航。例如:

例如: -

PageFlow.Next();或PageFlow。以前();

10

這就是我做的:

public ActionResult ResendActivationEmail() 
    { 
     // Do other things here 
     return new RedirectResult(Request.UrlReferrer.AbsoluteUri); 
    } 
相關問題