2014-10-12 54 views
0

我知道這個問題已經回答之前,但我無法擊中我的控制器內的行動。如何使AJAX調用

這裏是行動

public JsonResult GetUpdate() 
{ 
    //get a list of valid elements 
    var result = getContent(); 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

在我的腳本:

$.ajax({ 
    type: 'GET', 
    url: '@Url.Action("GetUpdate")', 
    dataType: 'json', 
    success: function (constraints) { 
     alert("Application updated"); 
    }, 
    error: function (ex) { 
     alert('Failed to retrieve update.' + ex); 
    } 
}); 

使用招我可以打GetUpdate但是從瀏覽器中的Ajax調用失敗。我是否正確訪問網址?

更新: 以下是錯誤消息: 「NetworkError:404未找到 - 協議://本地主機:port/Controller/@Url.Action(%22GetUpdate%22)」

以下作品通過小提琴: 協議://本地主機:端口/控制器/ GetUpdate

+0

嘗試設置的URL'GetUpdate'。另外,請注意相對路徑。 – Brandon 2014-10-12 13:16:19

+0

對不起,你是什麼意思?我怎麼做?我以爲@ url.Action產生了相對路徑?! – user3320502 2014-10-12 13:20:31

+0

我覺得你錯過了定義'GetUpdate'的控制器類名稱 – 2014-10-12 13:30:48

回答

1

剃刀代碼(C#和所有其他服務器端腳本)只從.cshtml文件執行,因此C#和剃刀不能在.js文件中使用。
'@Url.Action("GetUpdate")'不會生成一個URL,它只是一個字符串,因此您正試圖請求protocol://domain:port/[email protected]("GetUpdate")哪個不是存在

這裏是你可以做什麼:

  • .cshtml文件可以將生成的URL存儲在一個JavaScript變量,並傳遞給外部JS文件。
  • 您可以將您的外部JavaScript移動到.cshtml文件,以便您可以使用Razor。
  • 使用相對路徑字符串像/Controller/GetUpdate

我推薦的第一個。

0

你可以試試這個出,其中_ApplicationPath是協議://本地主機:端口/

 
$.ajax({ 
    type: 'GET', 
    url: _ApplicationPath + "/ControllerName/GetUpdate", 
    dataType: 'json', 
    success: function (constraints) { 
     alert("Application updated"); 
    }, 
    error: function (ex) { 
     alert('Failed to retrieve update.' + ex); 
    } 
});