【问题标题】:Cutom Routing in MVC Razor URlHelper.Action Path IssueMVC Razor URlHelper.Action 路径问题中的自定义路由
【发布时间】:2012-02-12 11:12:55
【问题描述】:

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

应用程序名称是 ValidationTest 并且我确实将我的默认绑定更改为以下。 效果很好,但是我在 Controller 类中确实有一些操作,并且我确实使用 urlHelper 来识别操作路径和控制器路径您可以在底部代码中看到,但是在我更改默认路由后,它会在尝试从 url helper 读取动作,我是 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
    );
}

所以我的网址是

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

所以

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

这很好用 我的问题是,我有一个 Ajax 动作调用,其中动作 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

【问题讨论】:

  • 感谢您的回答:)

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 我也添加了 MVC 的默认操作,这样就可以了,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 2016-12-26
  • 2021-05-04
  • 2018-10-18
  • 1970-01-01
相关资源
最近更新 更多