0

在中继器内部我有一个 html 复选框,现在我想在文件后面的代码中访问此复选框以检查该复选框是否被选中。但我不想用户 runat="server" 标签,我怎么能这样做我的代码如上所述

 <input id="cbfdgroup" class="checkitem" type="checkbox" name="fd_cb_group[]" value='<%#Eval("FoodItemsUid") %>'>

在文件后面的代码中,我试图像这样访问

foreach (RepeaterItem ri in rptMenu.Items)
        {
            if (ri.ItemType == ListItemType.Item || ri.ItemType == ListItemType.AlternatingItem)
            {
                HtmlInputCheckBox chk = (HtmlInputCheckBox)ri.FindControl("cbfdgroup");

                if (chk.Checked)
                {
                }
            }
        }

但这会给出错误,因为对象引用未设置为对象的实例。我应该如何在不使用 runat =“server”标签的情况下在文件后面的代码中获取此控件

4

3 回答 3

1

这不可能。为了澄清,这runat="server"部分正在做它所说的。就是说这个控件应该可供服务器使用和访问。

代码隐藏中的代码是在服务器上运行/执行的代码。因此,从逻辑上讲,如果该控件对服务器不可用,则它不能被代码操纵(因此它也不会出现在智能感知中。)

于 2012-04-09T18:32:04.357 回答
1

我不相信你问的是可能的。runat=server是使控件对后面的代码可用的原因。如果您删除该属性,则您的代码根本不会以任何方式了解该控件。

多一点解释:

代码隐藏在服务器上执行。因此,您想要在代码隐藏中访问的任何控件都必须具有runat=server才能可用。两者密不可分。

于 2012-04-09T18:24:52.687 回答
0

你不需要从转发器中读取项目

假设您正在向服务器发送回发(http post)

您可以通过简单地阅读选定的复选框:

string x = Request["fd_cb_group[]"];

它大于 1 它将用逗号分隔,只需使用 split 获取所选值的字符串列表。

整个事情是这样的:

        protected void Button1_Click(object sender, EventArgs e)
    {
        string x = Request["fd_cb_group[]"];

        string[] allSelectedOnes = x.Split(',');

        foreach(string item in allSelectedOnes)
        {
            //your custom code for the selected checkboxes
        }
    }
于 2012-04-09T18:37:40.987 回答