如何使用web表单(而不是MVC)从ajax Http POST中获取c#中服务器端的复选框值

本文关键字:获取 POST Http 服务器端 复选框 ajax 表单 web 何使用 MVC | 更新日期: 2023-09-27 18:35:52

这是我的ajax调用:

$(function () {
        $("#chkFilter").on("click", "input", function (e) 
        {
            var filterCheckboxes = new Array();
            $("#chkFilter").find("input:checked").each(function () {
                //console.log($(this).val()); //works fine
                filterCheckboxes.push($(this).prop("name") + "=" + $(this).val());
                console.log($(this).prop("name") + "=" + $(this).val());
                //var filterCheckboxes = new Array();
                //for (var i = 0; i < e.length; i++) {
                //    if (e[i].checked)
                //        filterCheckboxes.push(e[i].value);
                //}
            });
        console.log("calling ajax");
        $.ajax({
            url: "/tools/oppy/Default",
            type: "POST",
            dataType: "json",
            data: { filterValues: filterCheckboxes }, // using the parameter name
            success: function (result) {
                if (result.success) {
                }
                else {
                }
            }
        });
        });
    });

我的服务器端代码:

public partial class tools_oppy_Default : System.Web.UI.Page
{
    ...
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.HttpMethod == "POST")
        {
            string checkedBoxes = Request["filterValues"];
            testLabel.Text = checkedBoxes;
        }

我只是想获得带有适当检查值的postURL,以便在服务器上解析它。但是,我在获取URL时遇到了问题。字符串checkedBoxes应该包含一个查询字符串,如name=value&name=值&名称但当我测试它时,testLabel没有显示任何内容。我使用的是web表单应用程序,而不是MVC。此外,我对ajax及其行为还很陌生。谢谢

如何使用web表单(而不是MVC)从ajax Http POST中获取c#中服务器端的复选框值

首先,我假设JQuery调用中的url是有效的,因为没有aspx扩展名。

其次,看起来你需要做的是创建一个web方法,并从JQuery中调用它。例如,下面是一个接受字符串的web方法

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

您可以使用与当前代码相同的方式调用它,只需更新url参数以包含方法名称

url: "PageName.aspx/MethodName",

有关web方法及其与JQuery的联合的更多详细信息,请查看本文

已编辑以下是完整的样本
web方法应该看起来像下面的

[WebMethod]
public static string GetData(string filterValues)
{
    return filterValues; //This should be updated to return whatever value you need
}

调用web方法的客户端部分应该看起来像下面的

$.ajax({
    url: "/Default/GetData",
    type: "POST",
    contentType: "application/json; charset=utf-8", //I have added this as "contentType" parameter represents the type of data inside the request meanwhile the "data" parameter describes the data inside the response
    data: "{ filterValues:'"" + filterCheckboxes + "'"}", //Note that I have updated the string here also set the name of the parameter similar to the input of the webmethod
    dataType: "json",
    success: function (result) {
        alert(result.d);//You should access the data using the ".d"
    }
});

最后一件事,如果你使用asp.net永久路由,上面的代码将不起作用,你应该通过从更新文件"App_code/RouteConfig.cs"来禁用它

settings.AutoRedirectMode = RedirectMode.Permanent;

settings.AutoRedirectMode = RedirectMode.Off;

并且记得在以上更新后清除浏览器缓存