如何使用 Web 表单(不是 MVC 或 asmx 页面)从 ajax Http POST 在服务器端获取选中的复选框值?

How to obtain checked checkbox values on the serverside in c# from an ajax Http POST using web forms (not MVC or asmx pages)?

好的。我会再试一次。 我对 ajax 和 jQuery 很陌生。

甚至试图查看我是否可以在服务器上获取 filerValues,但无济于事。另外,我不想使用 asmx 页面,所以我想我不能使用 web 方法。

我只是想获取具有适当检查值的 post URL 以便我可以在服务器上解析它。每次我选中一个复选框时,它应该将所有选中的值发送到服务器。但是,我在获取 URL 时遇到了问题。 filterValues 应该包含一个查询字符串,如 name=value&name=value&name.... 当我运行开发人员控制台时,它确实在有效负载中显示了这一点。它确实是 posting 正确的数据。但是当我测试我是否可以在服务器上访问它时,它一直在 ajax 中命中错误函数。我使用的是 Web 表单应用程序,不是 MVC 也不是 asmx 页面。另外,我是 ajax 及其行为的新手。谢谢

编辑:

我想出了解决办法。事实证明,我需要 post 表单数据,而不是任何其他类型的有效负载。

这个答案应该有帮助:

以下是@Darin Dimitrov 的回答副本

如果您想在经典 WebForms 应用程序的代码中调用方法,您可以使用 PageMethods:

[WebMethod]
public static string GetDate()
{
    return DateTime.Now.ToString();
}

然后调用方法:

$.ajax({
    type: 'POST',
    url: 'PageName.aspx/GetDate',
    data: '{ }',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function(msg) {
        // Do something interesting here.
    }
});

这是我为您编写的完整示例:

将此方法添加到您后面的代码中:

    [WebMethod]
    public static string SayHello(List<string> names)
    {
        var str = "hello ";
        for (var i=0; i<names.Count; i++)            
        {
            str += (names[i] + ", ");
        }
        return str;
    }

将此添加到您的 aspx 文件中。

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
    <script type="text/javascript">
        var myArr = ["John", "Fred", "Sam"];
        $(function () {
            $.ajax({
                type: 'POST',
                url: 'test.aspx/sayhello',
                data: "{ 'names': " + JSON.stringify(myArr) + "}",
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function (msg) {
                    // Notice that msg.d is used to retrieve the result object
                    alert(msg.d);
                }
            });
        });
    </script>
</head>
<body>
    <form id="Form1" runat="server">

    </form>
</body>
</html>

PageMethods 不限于简单的参数类型。您可以使用任何类型作为输入和输出,它会自动 JSON 序列化。

使用ajax调用时应考虑积分

  1. url:PageName/functionName(AjaxSubmit) AjaxSubmit 应该是静态的 [WebMethod]
  2. 如果您想将任何参数传递给 [WebMethod],那么两个文件中的参数名称应该相同。 3.If 您正在将数组从客户端传递到该 WebMethod,那么 Webmethod 的参数将是列表

我想出了解决办法。事实证明,我需要 post 表单数据,而不是任何其他类型的有效负载。

$(function () {

                $("#chkFilter").on("click", "input", function (e) {
            var filterCheckboxes = new Array();
            $("#chkFilter").find("input:checked").each(function () {
                filterCheckboxes.push(" " + $(this).prop("name") + "=" + $(this).val() + ", ");
            });

            filterObj = {};
            filterObj.action = "updateProjects";
            filterObj.list = filterCheckboxes;
            var filtersStringify = JSON.stringify(filterObj)
            $.ajax({
                url: "/api/project/",
                type: "POST",
                data: filtersStringify,
            }).done(function (response) {
                //some stuff to do

            });
        });
    });

 if (Request.HttpMethod == "POST")
    {            
        // get json out of body
        var serializer = new JsonSerializer();
        var sr = new StreamReader(Request.InputStream);
        var jtr = new JsonTextReader(sr);
        dynamic data = serializer.Deserialize(jtr);

        if (data.action == "getProjects")
        {
            getProjects(data);
        }
        if(data.action =="updateProjects")
        {
            updateProjects(data);

        }

    }
    else
    {

    }

}

public void getProjects(dynamic data)
{
  //do stuff with the data

}