我有一个返回 JsonResult 的控制器
[HttpGet]
public JsonResult ShopMarkers()
{
var shops = repository.Shops;
return Json(shops);
}
在我看来,我想用该方法的数据填充变量。在一个较旧的MVC项目中,我记得我会写一个ajax调用来填充var。像这样:
var markers;
$.ajax({
type: 'POST',
url: '/Map/ShopMarkers',
dataType: 'json',
contentType: dataType,
data: data,
success: function (result) {
markers = result;
}
});
或者我可以将字符串返回到视图,然后在脚本标记中解析它。
这些似乎都不对。有没有更好的方法可以在 .Net Core 中填充我的变量?
您的客户端代码当前正在使用 POST 类型请求进行 ajax 调用。但是您的操作方法是用 HttpGet 修饰的。所以你应该收到一个 404 错误(如果你检查你的浏览器开发工具,你应该能够看到网络 (ajax( 调用的状态(
[HttpPost]
public JsonResult ShopMarkers()
{
var shops = repository.Shops;
return Json(shops);
}
假设您在方法中的代码没有崩溃ShopMarkers
这应该可以工作!(抛出任何异常左右(
在客户端代码中,您正在尝试发送对象。如果要发送复杂对象,则应将 contentType 指定为"application/json",并使用JSON.stringify
方法发送数据。
var dataType = "application/json";
var data = { userId: 12, Password: 'ss' };
$.ajax({
type: 'POST',
url: '/Home/ShopMarkers',
dataType: 'json', // not really needed in your case
contentType: dataType,
data: JSON.stringify(data),
success: function (result) {
var markers = result;
console.log(result);
//Use result only here. Not outside
}
});
由于 ajax 调用在请求正文中发送数据,因此应使用 [FromBody]
属性修饰方法参数,以便模型绑定器能够将发布的数据(来自请求正文(映射到参数。
[HttpPost]
public JsonResult ShopMarkers([FromBody] YourUserViewModel model)
{
//to do : Return some JSON
}