我无法从ASP.NET Core Razor页面中的AJAX请求中提取数据。
Ajax请求代码(包含在剃须刀页面.cshtml页面上的<script>
块中:
$("body").ready(function AjaxTest() {
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'text',
url: '/Menus/Admin_MainMenu?action=TestMethod',
method: 'GET',
success: function (data) {
alert("Request Successful" + data);
},
error: function () {
alert("Request Failed");
}
});
})
以及相应的PageModel方法(目前正在测试):
[HttpGet]
public string TestMethod()
{
string mystring = "success";
return mystring;
}
我知道请求有效,因为我收到“请求成功”警报。但是,我得到的是与.cshtml页面的布局相对应的HTML字符串,而不是我的值为mystring
后跟“请求成功”。
我尝试将数据类型更改为JSON(在AJAX请求中都使用dataType
,在方法返回类型中都使用jsonrequest
,但这会使请求失败。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:2)
使用dataType: 'text'
时的问题是字符串可能呈现为HTML输出而不是简单字符串。另外,在function AjaxTest()
事件中声明ready
并不是在AJAX回调中声明函数的正确方法,即使由于范围问题,该语法也是有效的。
您需要使用JsonResult
而不是string
的返回类型:
public JsonResult OnGetTestMethod()
{
string mystring = "success";
return new JsonResult(mystring);
}
然后在AJAX调用中使用handler
参数:
$(document).ready(function () {
$.ajax({
dataType: 'json',
url: '/Menus/Admin_MainMenu?handler=TestMethod',
type: 'GET',
success: function (data) {
alert("Request Successful " + data);
},
error: function () {
alert("Request Failed");
}
});
});
注意:
1)这里提到的JsonResult
不是System.Web.Mvc.JsonResult
,它使用Microsoft.AspNetCore.Mvc.JsonResult
并且没有JsonRequestBehavior
属性。
2)Razor页面使用OnGet
和OnPost
操作方法前缀分别处理HTTP GET和POST,因此[HttpGet]
属性是不必要的。
更多参考文献: