MVC3自定义路由存在虚拟目录问题

时间:2011-04-05 16:36:23

标签: javascript asp.net-mvc-3 asp.net-mvc-routing

我在全球

中有这个
 //custom route
 routes.MapRoute(
      "DownloadInstall", // Route name
      "{controller}/{action}/{id}/{logonserver}", // URL with parameters
      new { controller = "Software", 
           action = "DownloadInstall" }  // Parameter defaults
 );

 //custom route
 routes.MapRoute(
      "DownloadHelp", // Route name
      "{controller}/{action}/{id}/{logonserver}", // URL with parameters
      new { controller = "Software", 
          action = "DownloadHelp" }  // Parameter defaults
 );

 //default route
 routes.MapRoute(
      "Default", // Route name
      "{controller}/{action}/{id}", // URL with parameters
      new { controller = "Software", action = "Index", 
           id = UrlParameter.Optional } // Parameter defaults
 );

我在javascript中调用自定义路由(效果很好),如下所示:

 window.location.href =  '/Software/DownloadHelp/' + @Model.ID +'\/' + 
      getLogonServer(); 

然而,只要我将它移动到具有虚拟目录的IIS7盒子,我的默认路由就足够聪明,可以在虚拟名称前添加...但是找不到基于javascript的路由,因为虚拟目录不是没过。

2 个答案:

答案 0 :(得分:0)

如果我是你,我会尝试使用Url助手,但我发现javascript函数结果会有问题。
我不确定这是否有效,但您可以尝试建立这样的链接:

var server = getLogonServer();
window.location.href = '@Url.Action("DownloadHelp", "Software", 
    new { Model.Id, logonserver = ""})' + '/' + getLogonServer();

什么肯定会使getLogonServer()成为一个Html辅助函数而不是一个javascript函数,但我不知道这是否适合你。

答案 1 :(得分:0)

我通过使用@ Url.Content助手解决了这个问题:

window.location.href =  '@Url.Content("~/Software/DownloadInstall/")' + @Model.ID +'\/' + getLogonServer();