Передача данных по ограничению маршрута - PullRequest
1 голос
/ 12 марта 2010

Hy, в моем Global.asax у меня есть это правило:

// Home
   routes.MapRoute("Home",
                   "{lang}/",
                   new { lang = "ita", controller = "Home", action = "Index" },
                   new { lang = new LanguageRouteConstraint() }
                  );

И мой класс LanguageRouteConstraint:

 public class LanguageRouteConstraint : IRouteConstraint
  {
    #region Membri di IRouteConstraint

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
      if ((routeDirection == RouteDirection.IncomingRequest) && (parameterName.ToLower(CultureInfo.InvariantCulture) == "lang"))
      {
        try
        {
          string lang = Convert.ToString(values[parameterName]);

          // Language check on db
          Language currLang = new Language().Get(lang);
          if (currLang != null) 
          {
            // Here I'd like to "save (in session|querystring|....)" the id 
            return true;
          }
        }
        catch
        {
          return false;
        }
      }
      return false;
    }

    #endregion
  }

И мой контроллер

public class HomeController : Controller 
{
  public ActionResult Index(string lang) 
  {
    // I would get the language ID without interrogating the data base
  }
}

В HomeController -> Index метод, я бы получил идентификатор языка без опроса базы данных, потому что я уже сделал в LanguageRouteConstraint.

Извините за мой плохой английский

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 15 марта 2010

Вы можете сделать следующее:

  • В методе Match введите идентификатор языка в RouteValueDictionary: values["lang"] = theLanguageId;
  • Превратите подпись вашего действия в нечто вроде ActionResult Index(int lang)
0 голосов
/ 15 марта 2010

Вы можете получить доступ к текущему сеансу через httpContext с вашим языковым ограничением

  Language currLang = new Language().Get(lang);
  if (currLang != null) 
  {
    httpContext.Session["Lang"] = id
    return true;
  }

тогда в вашем контроллере вы можете использовать свойство

public int Language { get return int.Parse(Session["Lang"].ToString()); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...