簡體   English   中英

無法識別JQuery中的ASP.NET MVC Url.Action

[英]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.ActionUrl.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM