MVC Razor URlHelper.Action路径问题中的自定义路由

时间:2012-02-12 11:12:55

标签: c# asp.net-mvc-3 razor asp.net-mvc-routing

我的应用程序有自定义路由,如下所示

应用程序名称是 ValidationTest ,我确实将默认绑定更改为以下内容。 这工作正常,但我确实在Controller类中有一些操作,我确实使用urlHelper来识别操作路径和控制器路径您可以在底部代码中看到,但在我更改了默认路由后,它会抛出异常从url helper读取操作,我是mvc的新手,所以请建议我如何给出Controller和Action的路径

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
    );
}

所以我的网址是

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

所以

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

这很好用 我的问题是,我有一个Ajax Action Call,其中Action URl被定义为Bellow 在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 :(得分:0)

在您的自定义路由中,您已删除了{action}令牌,这意味着您无法再指定除默认定义的RenderApp之外的任何其他操作。这就是urlHelper.Action方法返回null的原因。

您定义路线的方式,在此应用程序中,您只能在单个控制器(RenderApp)上执行单个操作(Render)。在你的urlHelper.Action调用中,你试图调用BuildNavigationMenu动作,但显然这是不可能的,因为永远无法达到此动作。

因此,您必须修改"RubinsApp/{CRM}/{id}"路由,以便至少包含{action}令牌。或者在它之后添加另一个路线定义。

只是关于你的代码的旁注。如果您在控制器操作中编写此内容,则无需实例化新的UrlHelper。 Controller类已经有Url属性:

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