所以我有这个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。第一个警报确实显示-1。然后StuffID在AddToStuff()内的“if”中变为0,而Second Alert显示为0。
但是我有Javascript函数AddToStuff再次调用C#函数,但目标是让第二个参数(stuffID)为0而不是-1。甚至第三个警报也会显示0.但在C#函数中,stuffID仍为-1。
我无法传递0。任何帮助都将不胜感激。
注意:我将我的代码概括为“某事”和“东西”,但该部分应该正常工作 - 函数会在我期望的时候调用。
答案 0 :(得分:1)
如果我评论所有的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标记
答案 1 :(得分:1)
建议:
Stuff(int somethingID = 0, int stuffID = -1)
的默认值也可能导致问题。 dataType: 'json'
GET
请求,请确保您已正确设置data
对象