我知道这个问题之前已经得到了回答,但我无法在我的控制器中找到一个动作。
这是行动
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);
}
});
使用fiddler我可以点击GetUpdate但是从浏览器中Ajax调用失败。我是否正确访问了该网址?
更新: 以下是错误消息: " NetworkError:404 Not Found - protocol:// localhost:port/Controller/@Url.Action(%22GetUpdate%22)"
以下通过Fiddle工作: 协议://本地主机:端口/控制器/ GetUpdate
答案 0 :(得分:1)
Razor代码(C#和所有其他服务器端脚本)仅从.cshtml
文件执行,因此C#和Razor不能用于.js
文件。
'@Url.Action("GetUpdate")'
不生成网址,只是一个字符串,因此您尝试请求存在的protocol://domain:port/Controller@Url.Action("GetUpdate")
。
以下是您可以做的事情:
.cshtml
文件中,您可以将生成的URL存储在JavaScript变量中,并将其传递给外部JS文件。.cshtml
文件,以便使用Razor。/Controller/GetUpdate
我会推荐第一个。
答案 1 :(得分:0)
你可以试试这个,其中_ApplicationPath是protocol:// localhost:port /
$.ajax({ type: 'GET', url: _ApplicationPath + "/ControllerName/GetUpdate", dataType: 'json', success: function (constraints) { alert("Application updated"); }, error: function (ex) { alert('Failed to retrieve update.' + ex); } });