asp.net-core - 在 Asp.net MVC Core 中,Jquery Ajax 调用传递的参数始终为空
问题描述
我正在将我的 MVC 应用程序迁移到 Asp.Net 核心(3.1 版)应用程序。我有一个用于菜单导航的布局页面。当用户单击任何菜单时,出于某些业务目的,我需要将一些值从布局传递给控制器。为此,我在这里使用了一个 ajax 调用。
下面的 ajax 调用代码在 MVC 中运行良好,但在 Asp.Net 核心中,传递的参数值在控制器中为空。
MVC的工作代码:
function SetCurrentPageNameSession(currentPageName, isBookMarkPage) {
if(isBookMarkPage==undefined)
isBookMarkPage = false;
var url = baseUrl+"Manage/HighlightCurrentMenu/"
$.ajax({
type: "POST",
data: "{'CurrentPage':'" + currentPageName + "', 'IsBookMark':'" + isBookMarkPage + "'}",
url: url,
contentType: "application/json; charset=utf-8",
dataType: "json",
async:false,
success: function (data) {
var res = data.d;
},
error: function (xhr, ajaxOptions, thrownError) {
}
});
}
下面是我获得这些传递值的控制器操作方法:
[HttpPost]
public IActionResult HighlightCurrentMenu(string CurrentPage, bool IsBookMark)
{
return Json(true);
}
当相同的代码在 Asp.Net 核心中不起作用时,我用谷歌搜索它,发现需要修改 ajax 调用代码。
我在下面修改了数据部分:
function SetCurrentPageNameSession(CurrentPage, IsBookMark) {
var url = baseUrl+"Manage/HighlightCurrentMenu/"
$.ajax({
type: "POST",
data: JSON.stringify({ CurrentPage: CurrentPage, IsBookMark: IsBookMark }),
url: url,
contentType: "application/json; charset=utf-8",
dataType: "json",
async:false,
success: function (data) {
var res = data.d;
},
error: function (xhr, ajaxOptions, thrownError) {
}
});
}
并在控制器动作方法中使用了 FromBody:
[HttpPost]
public IActionResult HighlightCurrentMenu([FromBody] string CurrentPage, [FromBody] bool IsBookMark)
{
return Json(true);
}
我在“CurrentPage”参数中得到了 null 值。
我在下面自己尝试了另一种情况:
data: JSON.stringify("{'CurrentPage':'" + CurrentPage + "', 'IsBookMark':'" + IsBookMark + "'}"),
在这种情况下,我在动作方法内的“CurrentPage”参数中获得完整的 Json 格式值
下面是相同的屏幕截图。
请建议。
解决方案
在 Asp.Net 核心中,传递的参数值在控制器中为空
从此文档中,您可以找到:
不要[FromBody]
对每个操作方法应用多个参数。一旦请求流被输入格式化程序读取,就不能再读取它来绑定其他[FromBody]
参数。
为了满足您将多个数据从 JS 客户端传递到控制器操作方法的要求,您可以尝试以下代码片段。
[HttpPost]
public IActionResult HighlightCurrentMenu([FromBody]PageInfo pageInfo)
{
var currentPage = pageInfo?.CurrentPage;
var isBookMark = pageInfo?.IsBookMark;
//...
//code logic here
return Json(true);
}
页面信息类
public class PageInfo
{
public string CurrentPage { get; set; }
public bool IsBookMark { get; set; }
}
在 JS 客户端
data: JSON.stringify({ "CurrentPage": CurrentPage, "IsBookMark": IsBookMark }),
测试结果
推荐阅读
- mysql - SQL:构建表格以适应 3d 数据的技巧?
- android - 得到许可的错误,即使我认为我给了它
- c++ - C++ 使用不同数据类型的类似函数
- java - 使用 Swagger codegen 生成 Android Retrofit sdk
- hyperledger-fabric - 如何备份区块链网络数据?
- gradle - 将 Maven 依赖项转换为 Gradle
- rust - 如何将多个参数传递给 rust 闭包 - 预期闭包需要 1 个参数
- r - 如何在 azure 机器学习中添加新的 R 包以进行时间序列异常检测
- php - 调用我的视图后,codeigniter 中的白屏显示没有错误消息
- mongodb - 如何使用中间表使用 $lookup 管道查找值