2011-05-23 29 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。