Я должен запустить функцию в начале каждого действия, есть ли способ сделать общую «вещь»? - PullRequest
1 голос
/ 11 июня 2009

Я пытался использовать Sub New, но у меня нет доступа к информации URL

что у меня есть что-то вроде:

 function Index(byval lang as string) as action result
      setLang(lang)
      ....
      return view
 end function

 function List(byval lang as string) as action result
      setLang(lang)
      ....
      return view
 end function


 function Details(byval id as integer?, byval lang as string) as action result
      setLang(lang)
      ....
      return view
 end function

.....

Есть ли общий способ, которым я мог бы воспользоваться, чтобы мне не приходилось иметь дело с языком в КАЖДОМ действии?

Ответы [ 5 ]

1 голос
/ 11 июня 2009

Я бы создал фильтр пользовательских действий и украсил бы каждый метод действия своим собственным атрибутом [HandleLanguage].

1 голос
/ 11 июня 2009

Переопределить OnActionExecuting ():

public class YourController : Controller
{
    protected string Lang;

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //Lang = filterContext.ActionParameters["lang"];

        /* OR */

        Lang = filterContext.RouteData.Values["lang"];
    }

    ...
}

Лучше переопределить OnActionExecuting () в базовом контроллере, если он есть в вашем проекте.

UPDATE:

Вы можете удалить «lang» из вашего маршрута и из ваших действий и переместить его в строку запроса:

<%= Html.ActionLink("text", "action", "controller", new { lang = "ru" }, null) %>

с маршрутом по умолчанию даст:

/controller/action/id?lang=ru

Затем в OnActionExecuting:

Lang = Request.QueryString["lang"];
1 голос
/ 11 июня 2009

Вы можете попытаться взглянуть на Аспектно-ориентированное программирование (AOP), если вы действительно хотите сделать это универсальным способом, но я не совсем уверен, что оно того стоит в вашем случае.

Случайная ссылка на AOP: http://weblogs.asp.net/podwysocki/archive/2008/03/28/understanding-aop-in-net.aspx

0 голосов
/ 11 июня 2009

Если бы это было в Python, я бы подумал об использовании функции декоратора. Я вижу примеры этого с C #, но ничего для VB.NET. Однако в данном конкретном случае я не уверен, что какая-то выгода действительно есть.

0 голосов
/ 11 июня 2009

Короткий ответ - нет.

Если вы обнаружите, что вам нужно постоянно делать одно и то же, вы можете переосмыслить свою архитектуру на более высокий уровень.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...