我正在将我的 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 格式值
下面是相同的屏幕截图。
请建议。