Маршрутизация Cutom в MVC Razor URlHelper.Action Path Issue - PullRequest
0 голосов
/ 12 февраля 2012

У меня есть Пользовательская маршрутизация для моего приложения, как показано ниже

Имя приложения ValidationTest , и я изменил привязку по умолчанию к следующей. Это работает нормально, но у меня есть некоторые действия в классе Controller, и я использую urlHelper для определения пути действия и пути контроллера. Вы можете увидеть это в нижнем коде, но после того, как я изменил маршрутизацию по умолчанию, она выдает исключение, пытаясь читать действие из помощника URL, и я новичок в MVC, поэтому, пожалуйста, предложите мне, как дать путь к контроллеру и действия

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
         "MyRout",// Route name
         "RubinsApp/{CRM}/{id}",// URL with parameters
         new { 
             controller = "Render", 
             action = "RenderApp", 
             id = UrlParameter.Optional 
         } // Parameter defaults
    );
}

так что мой URL

http://localhost/ValidationTest/RubinsApp/crm/test

так

ValidationTest=Application Name
RubinsApp/CRM =Routing Para
test=id

и это прекрасно работает Моя проблема в том, что у меня есть Ajax Action Call, где URl действия был определен как сильфон в cshtml

UrlHelper urm = new UrlHelper(Request.RequestContext);
var urlsMenu = urm.Action("BuildNavigationMenu", "Render").ToString(); //This Thorws Object null Error

Здесь

BuildNavigationMenu=Action Name
Render= Controller

1 Ответ

0 голосов
/ 13 февраля 2012

В вашем пользовательском маршруте вы удалили токен {action}, означающий, что вы больше не можете указывать никакое другое действие, кроме того, которое определено по умолчанию, RenderApp.Вот почему метод urlHelper.Action возвращает ноль.

Способ, которым вы определили свои маршруты, в этом приложении вы могли когда-либо выполнять только одно действие (RenderApp) на одном контроллере (Render).В вашем вызове urlHelper.Action вы пытаетесь вызвать действие BuildNavigationMenu, но, очевидно, это невозможно, так как это действие никогда не будет достигнуто.

Поэтому вам придется изменить маршрут "RubinsApp/{CRM}/{id}", чтобы включить хотя бы{action} токен где-то.Или добавьте другое определение маршрута после него.

И просто дополнительная заметка о вашем коде.Если вы пишете это внутри действия контроллера, вам не нужно создавать новый UrlHelper.Класс Controller уже имеет свойство Url:

public ActionResult Foo()
{
    var urlsMenu = Url.Action("BuildNavigationMenu", "Render");
    ...
}
...