2011-05-23 75 views
1

我有一个网站,使用大量使用AJAX,并为了保持东西像Urls在一个明智的地方,我输出所需的网址在一个脚本块在页面上,然后在稍后的Javascript文件中使用它们。使用Url.Action没有路由值截断网址

这方面的一个例子是:

在Index.cshtml

<script> 
    if (!app.frontoffice) 
     app.frontoffice = {}; 
    if (!app.frontoffice.urls) 
     app.frontoffice.urls = {}; 

    if (!app.frontoffice.urls.index) 
     app.frontoffice.urls.index = "@Url.Action("index", "frontoffice", new { area = string.Empty, id = string.Empty })"; 
</script> 

在JS文件的某处

$(function() { 
    $("myButton").click(function(e) { 
     $.ajax({ 
      url: app.frontoffice.urls.index, 
      data: { 
       id: 55 
      }, 
      success: ... 
      error: ... 
     }); 
    }); 
}); 

的问题是, Ť他生成的Url被创建为 - /frontoffice,注意它不包括index操作。这是因为当它产生我们给它一个空id,所以当我们来使用它,被请求的URL实际上是/frontoffic/55', not/frontoffice /指数/ 55' ..

UrlHelper似乎被扑杀动作名称来自url。有没有另一种方法可以使用,不会从Url中删除项目? - 我希望通过一个清晰的,可重复使用的解决方案逃脱,因为这种事情发生在整个网站。

感谢
基隆

回答

2

您可以使用占位符作为id。

app.frontoffice.urls.index = function (id) { 
    return "@Url.Action("index", "frontoffice", new { id = "000" })".replace('000', id); 
} 

然后在你的js文件

$(function() { 
    $("myButton").click(function(e) { 
     $.ajax({ 
      url: app.frontoffice.urls.index(55), 
      success: ... 
      error: ... 
     }); 
    }); 
}); 
0

这可能需要在你的路由定义得到照顾。你可能仍然有这样的事情定义:

routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional});

对于一个我可能会删除此或放东西,明确定义你的默认路由定义上面生成的URL。