如何在服务器端按钮单击处理程序中检索JavaScript数组?

时间:2015-05-06 13:53:39

标签: javascript jquery asp.net

我有以下jQuery:

<script>
    $(document).ready(function () {
        $('#btnGetIDs').click(function getIDs() {
            var checkedIds = $(":checkbox:checked").map(function () {
                return this.id;
            }).get();
        });
    });
</script>

这用于创建复选框(它嵌套在数据表中的一个冗长的foreach数据行中)。

                    results.Append("<td> <input id=" + RosteredCareID + " type=\"checkbox\" unchecked>        </td>");

我可以看到,从浏览器中调试,它正在按预期工作并创建一个ID数组。

预期的功能是: 1.系统加载页面 2.用户单击某些复选框 3.用户点击提交 4.系统获取复选框和存储在数组

中的ID

下面

    protected void btnConfirm_Click(object sender, EventArgs e)
    {
        string[] IDs = new string[20];

        // IDs = "";


    }

那我怎样才能从btnConfirm_Click事件中访问jQuery数组?

我尝试过一个scriptmanager代码行,但它在主页面上导致了scriptmanager的错误。

1 个答案:

答案 0 :(得分:2)

在复选框标记中添加名称属性。

results.Append("<td><input id='" + RosteredCareID + "' type='checkbox' name='" + RosteredCareID  + "' unchecked /></td>");

(注意我正确引用了你的ID。我在JS字符串中使用了单引号,以避免需要转义双引号。)

然后在服务器端,值将在Request.Form属性中可用。你可以这样列举它们:

foreach (var name in Request.Form.AllKeys)
{
    System.Diagnostics.Debug.WriteLine("Form Name: " + name + " Form Value: " + Request.Form[key]);
}

如果检查了该值,它将在那里。

可能有很多表单值,因此您需要过滤它们以获得您想要的内容。我建议你在名字前加上一个特定的字符串。例如:

results.Append("<td><input id='" + RosteredCareID + "' type='checkbox' name='RosterCareCB_" + RosteredCareID  + "' unchecked /></td>");

然后在服务器端过滤该前缀。

var checkedIds = new List<string>();
foreach (var name in Request.Form.AllKeys)
{
    if(name.StartsWith("RosterCareCB_") && Request.Form[name] == "on")
    {
        checkedIds.Add(name);
    }
}