参数未传递给ActionResult

时间:2016-09-16 17:06:40

标签: javascript c# ajax

所以我有这个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。任何帮助都将不胜感激。

注意:我将我的代码概括为“某事”和“东西”,但该部分应该正常工作 - 函数会在我期望的时候调用。

2 个答案:

答案 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)

建议:

  • 在浏览器中使用fiddler或开发人员工具查看传递给服务器的内容(0或-1)?
  • 如果服务器收到的数据不正确,Stuff(int somethingID = 0, int stuffID = -1)的默认值也可能导致问题。
  • 在Ajax调用dataType: 'json'
  • 中设置数据类型
  • 如果您使用GET请求,请确保您已正确设置data对象