[英]ASP.NET MVC Url.Action in JQuery is not recognized
我試圖在我的js文件中使用Url.Action()方法來定義我的ajax調用的url。 到目前為止,我失敗了。
$.ajax(
{
type: "POST",
url: '@Url.Action("SomeAction", "SomeController")',
data: {
fileID: rightClickedFileId
},
success: function (data) {
}
});
如果我以這種方式定義網址,瀏覽器會嘗試將數據發布到
http://localhost:5907/FileManager/@Url.Action(%22SomeAction%22,%20%22SomeController%22)
結果我的ajax調用失敗了。
但是,如果我改用'/SomeController/SomeAction'
,那么每一'/SomeController/SomeAction'
都可以。
第二個工作正常,但我想知道第一個問題? 可能是由於路由配置?
謝謝。
Url.Action
是一個html幫助方法,它可以在你的剃刀視圖中工作,而不是在外部javascript文件中。
你可以做的是,在剃須刀視圖中使用Url.Action
幫助方法獲取你的動作方法的相對url並將其設置為javascript變量並在外部js文件中使用它。 執行此操作時,請務必使用javascript命名空間以避免與現有全局變量發生沖突。
您可以在_Layout.cshtml中添加此代碼
<script type="text/javascript">
var yourApp = yourApp || {};
yourApp.Urls = yourApp.Urls || {};
yourApp.Urls.baseUrl = '@Url.Content("~")';
yourApp.Urls.editUserUrl= '@Url.Action("Edit","User")';
</script>
或者在特定於頁面的視圖中,
@section Scripts
{
<script type="text/javascript">
var yourApp = yourApp || {};
yourApp.Urls = yourApp.Urls || {};
yourApp.Urls.baseUrl = '@Url.Content("~")';
yourApp.Urls.editUserUrl= '@Url.Action("Edit","User")';
</script>
<script src="~/Scripts/PageSpecificExternalJsFile.js"></script>
}
現在在您的外部JavaScript文件中,您可以像訪問它一樣訪問它
var urlToEditUser = yourApp.Urls.editUserUrl;
//you can use urlToEditUser now
// Or With the base url, you may safely add the remaining part of your url.
var urlToEditUser2 = yourApp.Urls.baseUrl+"User/Edit";
//you can use urlToEditUser2 now
始終使用Url.Action
或Url.RouteUrl
html幫助程序方法來構建操作方法的相對URL。 無論您當前的頁面/路徑如何,它都會正確構建網址。
如果你想在角度控制器/數據服務等內部做同樣的事情,請看一下這篇文章 ,它解釋了如何使用角度值提供者來做同樣的事情。
您不能在js文件中使用'@Url.Action("SomeAction", "SomeController")'
,因為這是ASP.NET MVC幫助器,如果您將代碼放到視圖中,一切都會正常工作。
我的方法類似於@ Shyju,除了在Razor視圖中設置一個變量,我在我的JavaScript中調用一個init
函數,並將所有需要Razor解釋的參數傳遞給它。
所以代碼看起來像這樣:
MyScript.init({
editUserUrl: "@Url.Action("Edit","User")",
anotherUrl: "@Url.Action("AnotherUrl", "User")"
})
然后在JavaScript中:
var m_options;
MyScript.init = function(options) {
m_options = options;
}
// use with m_options.editUserUrl here
$.ajax(
{
type: "POST",
url: m_options.editUserUrl,
data: {
fileID: rightClickedFileId
},
success: function (data) {
}
});
我在這里寫了一篇關於它的更詳細的帖子: http : //blog.blanklabs.com/2015/02/aspnet-mvc-refactoring-friendly.html
你可以像這樣寫它
url:'/controllername/Actionname',
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.