没有传递给ActionResult的参数
本文关键字:ActionResult 参数 | 更新日期: 2023-09-27 18:07:20
Javascript代码:
function AddToStuff(somethingID) {
var stuffID = document.getElementById('StuffID').innerText;
alert("First Alert: " + stuffID);
if (stuffID == -1) {
document.getElementById('StuffID').innerText = 0;
stuffID = 0;
}
alert("Second Alert: " + stuffID)
StuffCallback.fire(somethingID, stuffID);
}
$(document).ready(function () {
initializeStuff();
});
var StuffCallback = $.Callbacks();
function initializeStuff() {
StuffCallback.add(function (somethingID, stuffID) {
$.ajax({
url: "pos/Stuff",
type: "GET",
traditional: true,
data: {
somethingID: somethingID,
stuffID: stuffID
},
success: function (result, textStatus, xhr) {
alert("Third Alert: " + stuffID);
var contentArea = $("#Stuff");
contentArea.html(result);
$("#Stuff").hide();
$("#Stuff").show({ duration: 250 });
}
});
});
}
这个c#代码:
public ActionResult Stuff(int somethingID = 0, int stuffID = -1)
{
if (stuffID == -1)
{
//do something
}
else if (stuffID == 0)
{
//do something else
}
else
{
//do something else
}
}
return View();
}
}
问题是c#方法总是将stuffID设为-1,因此执行第一个"if"情况。
页面加载时和$(document)。ready调用initializeStuff, stuffID为-1,因此它执行第一个"if"情况。稍后,当调用AddToStuff()时,由于用户单击了某些内容,它将读入我的元素StuffID,我已将其初始化为-1。First Alert确实显示-1。然后,在AddToStuff()中的"if"中将StuffID更改为0,并且第二个警报确实显示了0。
但是然后我有Javascript函数AddToStuff再次调用c#函数,但目标是让第二个参数(stuffID)是0而不是-1。即使是第三次警报也会显示0。但是在c#函数中,stuffID仍然是-1。
我不能传递0。如有任何帮助,不胜感激。
注意:我将我的代码概括为"something"answers"stuff",但这部分应该可以正常工作-函数在我期望它们调用时调用。
建议:
- 在浏览器中使用fiddler或开发人员工具来查看正在传递给服务器的内容(0或-1)?
- 如果服务器接收到的数据不正确,默认值
Stuff(int somethingID = 0, int stuffID = -1)
也可能导致问题。 - 在Ajax调用
dataType: 'json'
中设置数据类型 - 如果您正在使用
GET
请求,请确保您已经正确设置了data
对象
如果我注释你所有的JS代码,只写
StuffCallback.fire(0, 5);
可以很好地工作,因为它接受5。这意味着你的stuffID没有被识别为int。它是哪种HTML元素?我看到你正在使用。innertext。既然你已经在使用jQuery了,为什么不使用
呢?var stuffID = $('#StuffID').val();
我已经注意到你的问题了。你打错字了。getElementById('StuffID'),你的p被称为" StuffID "。JS是大小写敏感的,所以它将足以解决这个问题,但请使用
<input type="hidden" ID="StuffID" value="@stuffID">
因为这是合适的HTML标记