我已经找了几个小时了,什么也没找到。很多类似的问题都是关于发布到控制器,但我只是想发布一个整数。我已经确认代码正在调用控制器,因为我可以在控制器中击中一个断点,并看到我硬编码的值没有传递给控制器。我确信我错过了一些愚蠢的东西,但在尝试了很多不同的东西之后,我无法弄清楚控制器总是得到值"0"。为selectedNavigationItemID
。在将整数传递到控制器时,我遗漏了什么?
分隔出AJAX调用:
$(document).ready(function()
{
$('#SelectedExistingNavigationItemID').change(function()
{
$.ajax('../Sections/GetSectionNavigationItemInfo/'),
{
type: 'POST',
dataType: 'json',
data: { 'selectedNavigationItemID': '3'},
success: function(data, status, jqXHR)
{
if ("success" == status)
{
alert('good');
}
}
};
});
});
控制器端的代码:
[Route("GetSectionNavigationItemInfo")]
public async Task<JsonResult> GetSectionNavigationItemInfo(int selectedNavigationItemID)
{
var navigationItem = await _navigationHelper.GetSectionNavigationMenuItem(selectedNavigationItemID);
return Json(navigationItem);
}
我尝试删除data
中信息周围的问题,指定application/json
为contentType
,将dataType
更改为multipart/form-data
,但这一切都导致0
的值被传递到控制器。
我错过了什么愚蠢的小事情使这个工作?
如果你看一下浏览器的网络选项卡,它可能是用GET
方法发送的,因为你的ajax
语法不正确,Ajax配置没有应用,默认情况下它是用GET
方法发送的,试着改变你的代码:
$(document).ready(function()
{
$('#SelectedExistingNavigationItemID').change(function() {
$.ajax({
url: '../Sections/GetSectionNavigationItemInfo/',
type: 'POST',
dataType: 'json',
data: { 'selectedNavigationItemID': '3' },
success: function(data, status, jqXHR) {
if ("success" == status) {
alert('good');
}
}
});
});
});
改进代码的技巧:
最好将[HttpPost]
属性添加到您的操作中,以便您的操作仅通过POST
方法可用。这样,您的操作方法将不再被GET
方法调用,并且您可以更容易地调试代码并找到问题。
[HttpPost]
[Route("GetSectionNavigationItemInfo")]
public async Task<JsonResult> GetSectionNavigationItemInfo(int selectedNavigationItemID)
{
var navigationItem = await _navigationHelper.GetSectionNavigationMenuItem(selectedNavigationItemID);
return Json(navigationItem);
}