没有传递给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",但这部分应该可以正常工作-函数在我期望它们调用时调用。

没有传递给ActionResult的参数

建议:

  • 在浏览器中使用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标记