如何在不使用runat =“server”标记的情况下在代码隐藏文件中找到转发器控件的HtmlInputCheckBox

时间:2012-04-09 18:21:57

标签: asp.net

内部转发器我有一个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”标记的情况下在代码隐藏文件中获得此控件

3 个答案:

答案 0 :(得分:1)

我不相信你的要求是可能的。 runat=server是使控件可用于后面的代码的原因。如果删除该属性,则后面的代码无法以任何方式识别控件。

再解释一下:

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

答案 1 :(得分:1)

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

代码隐藏中的代码是由服务器运行/执行的代码。所以从逻辑上讲,如果服务器无法使用控件,那么它就不能被代码操纵(因此它也不会出现在intellisense中。)

答案 2 :(得分: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
        }
    }