所以我有这个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()时,由于用户单击了某些内容,因此它将读取我已初始化为-1的元素StuffID。 First Alert确实显示-1。然后,在AddToStuff()内的“ if”中,将StuffID更改为0,并且第二个警报的确显示0。
但是然后我有了Javascript函数AddToStuff再次调用C#函数,但是目标是让第二个参数(stuffID)为0而不是-1。甚至第三个警报也将显示为0。但是在C#函数中,stuffID仍为-1。
我不能传递0。任何帮助将不胜感激。
注意:我将代码一般化为“某物”和“东西”,但是那部分应该可以正常工作-当我希望它们调用时,函数会调用它们。
最佳答案
意见建议:
使用浏览器中的提琴手或开发人员工具查看传递给服务器的内容(0或-1)?
如果服务器接收的数据不正确,默认值Stuff(int somethingID = 0, int stuffID = -1)
也可能导致问题。
在Ajax调用dataType: 'json'
中设置数据类型
如果使用的是GET
请求,请确保已正确设置data
对象