我的应用程序有自定义路由,如下所示
应用程序名称是 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
答案 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");
...
}