URL-адрес карты ASP.NET MVC для объекта значения маршрута - PullRequest
0 голосов
/ 14 июня 2010

Я создаю модульное приложение ASP.NET MVC, используя области.Короче говоря, я создал жадный маршрут, который перехватывает все маршруты, начинающиеся с {application} / {* catchAll}.

Вот действие:

// get /application/index  
public ActionResult Index(string application, object catchAll)  
{  
  // forward to partial request to return partial view  
  ViewData["partialRequest"] = new PartialRequest(catchAll);  

  // this gets called in the view page and uses a partial request class to return a partial view  
}  

Пример:

URL-адрес "/ Application / Accounts / LogOn" затем заставит действие Index передать "/ Accounts / LogOn" в PartialRequest, но в виде строкового значения.

// partial request constructor  
public PartialRequest(object routeValues)  
{  
  RouteValueDictionary = new RouteValueDictionary(routeValues);  
}  

В этом случаеСловарь значений маршрута не будет возвращать никаких значений для routeData, тогда как если я укажу маршрут в действии индекса:

ViewData["partialRequest"] = new PartialRequest(new { controller = "accounts", action = "logon" });

Это работает, а значения routeData содержат ключ «controller» и «action»ключ;тогда как раньше ключи были пустыми, и, следовательно, остальная часть класса не будет работать.

Поэтому мой вопрос, как я могу преобразовать "/ Accounts / LogOn" в catchAll в "new {controller ="account ", action =" logon "}" ??

Если это не ясно, я объясню больше!:)

Matt

Это "самый близкий", который у меня есть, но он, очевидно, не будет работать для сложных маршрутов:

// split values into array
var routeParts = catchAll.ToString().Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);  

// feels like a hack
catchAll = new
{
  controller = routeParts[0],
  action = routeParts[1]
}; 

1 Ответ

0 голосов
/ 14 июня 2010

Вам нужно знать, что это за часть в параметре catchAll.Затем вам нужно разобрать его самостоятельно (как вы делаете в своем примере или использовать регулярное выражение).У фреймворка нет возможности узнать, какая часть является именем контроллера, каково имя действия и т. Д., Поскольку вы не указали это в своем маршруте.

Почему вы хотите сделать что-то вродеэтот?Возможно, есть лучший способ.

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