- Actionlink - это просто вспомогательный метод для создания tag. You pass it the controller and action you want, and it uses your routing table to determine how to build the href attribute.
- To do what you want, your controller will need to change the session variable.
So, if the fact that a controller has been called is enough to figure out what the new session variable should be, then that's easy -- simply change the session variable in the action.
However, it might be that you want different links to the same action to set different session variables. In that case, your actinlink might look something like this:
<%= Html.ActionLink("Click Me", "action_name", "controller", new {session="new_value"}) %>
which causes something like this (depending on your route table):
Click Me
Итак, теперь вы должны установить переменную сеанса в вашем действии:
public ActionResult action_name(string session)
{
Session["val"] = session;
....
EDIT
Учитывая ваш комментарий, есть два способа сделать это: атрибут, украшающий контроллеры или главный контроллер. Я бы порекомендовал главный контроллер, поскольку вам, вероятно, будет проще его реализовать.
Поскольку вы не включили никаких конкретных примеров, я сделаю один. Именно здесь, независимо от того, какое действие вызывается, конкретная строка запроса приравнивается к определенному значению в сеансе, как для настройки языка.
Я собираюсь из памяти здесь, поэтому вам, возможно, придется немного поэкспериментировать (особенно с тем, где именно находятся объекты сеанса и запроса). Если нет, я могу посмотреть на мой код позже. Если у вас его еще нет, создайте главный контроллер, от которого получаются другие ваши контроллеры. Переопределить инициализацию (вызывая 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"];
}
Джеймс