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

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

本文关键字:POST Http ajax 获取 复选框 服务器端 页面 表单 Web 何使用 不是      更新时间:2023-09-26

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

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

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

编辑:

我已经找到了解决方案。事实证明,我需要发布表单数据,而不是任何其他类型的有效负载。

使用 ajax 调用时应考虑点

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

这个答案应该有帮助: https://stackoverflow.com/a/4508430/853295

以下是季米特洛夫@Darin回答的副本

如果要在经典 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 序列化。

我已经找到了解决方案。事实证明,我需要发布表单数据,而不是任何其他类型的有效负载。

$(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
}