- 一個ActionLink的只是一種輔助方法,創建一個< a href =「...」標記,您將它傳遞給您想要的控制器和操作,並使用您的路由表來確定如何操作b使用href屬性。
- 要做你想做的事,你的控制器需要改變會話變量。
因此,如果控制器已被調用的事實足以確定新會話變量應該是什麼,那麼很簡單 - 只需更改操作中的會話變量即可。
但是,您可能想要通過不同的鏈接指向同一個操作來設置不同的會話變量。在這種情況下,你的actinlink可能是這個樣子:
<%= Html.ActionLink("Click Me", "action_name", "controller", new {session="new_value"}) %>
這會導致這樣的事情(取決於您的路由表):
<a href="/controller/action_name?session=new_value">Click Me</a>
所以,現在你必須設置你的會話變量在你的動作:
public ActionResult action_name(string session)
{
Session["val"] = session;
....
編輯:
考慮到您的評論,有兩種方法可以解決這個問題:裝飾控制器或主控制器的屬性。我建議主控制器,因爲它可能是最容易實現的。
既然你沒有包括任何具體的例子,我會做一個。無論哪個動作被調用,它都在哪裏,特定的查詢字符串等同於會話中的特定值,例如設置語言。
我從這裏回憶,所以你可能不得不嘗試一下(尤其是會話和請求對象在哪裏)。如果沒有,我可以稍後再看看我的代碼。如果您還沒有,請創建一個其他控制器派生自的主控制器。重寫初始化(在其中調用base.Initialize)。再看看的查詢字符串,如:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
if (requestContext.Current.Request["language"])
requestContext.Current.Session["language"] = HttpContext.Current.Request["language"];
}
詹姆斯
我可以將參數傳遞給服務器功能?在代碼中該函數應該在哪裏存在?在View的代碼後面? – Trimack 2009-08-03 08:07:25
這個答案適用於ASP.NET。問題是關於事件概念不存在的ASP.NET MVC。 – 2009-08-03 12:06:12