您的位置:首页 > 编程语言 > ASP

asp:CheckBox后台获取不到前台的Checked属性

2012-05-27 10:47 387 查看
今天在测试程序的时候,碰到了这种现象:

后台代码:

for (int i = 0; i < this.GvCourses.Rows.Count; i++)
{
CheckBox chb = this.GvCourses.Rows[i].FindControl("CheckB") as CheckBox;
if (chb.Checked)
{
strDelete += "," + this.GvCourses.Rows[i].Cells[0].Text;
}
}


  前台:

<asp:GridView ID="GvCourses" runat="server">
<Columns>
<asp:BoundField HeaderText="ID" DataField="ID" HeaderStyle-CssClass="hide" FooterStyle-CssClass="hide"
ItemStyle-CssClass="hide">
<FooterStyle CssClass="hide"></FooterStyle>
<HeaderStyle CssClass="hide"></HeaderStyle>
<ItemStyle CssClass="hide"></ItemStyle>
</asp:BoundField>
<asp:TemplateField>
<HeaderTemplate>
选择
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox runat="server" ID="CheckB" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="序号" HtmlEncode="false" />
<asp:BoundField HeaderText="课程名称" DataField="C_NAME" />
<asp:BoundField HeaderText="单元类型" DataField="T_ID" />
.
.
.
</Columns>
</GridView>


  但在执行时,不管怎么弄,就是执行不到 if (chb.Checked) { strDelete += "," + this.GvCourses.Rows[i].Cells[0].Text; } 这里面的东西,换句话说就是chb的checked始终为false;而另一出的却始终能执行。

  于是我采用了方法一:清理了解决方案,重新编译,不行;

另一处checkbox的名字为“CheckBox1”, 我以为是名字的问题,

于是我采用了方法二:将此处的所有名字重新命名为CheckBox1, 清理解决方案,再次编译执行,还是不行;

这时采用了以前小时候经常用的终极方法:开始抱怨。

我在想是不是微软又产生了Bug。两处的代码我都已经复制成相同的样子了,还要怎样? 到底要怎样啊?

而当我静下心来想的时候,认为我产生错误的几率比微软产生Bug的几率要大,因为这个错误太明显太致命了。 于是我在检查分析;发现我每次执行后台的时候页面都有一闪,然后才执行后台,而且不管我选择多少个,后台都不会给strDelete赋值。

于是我得出: 服务器控件在执行后台代码时都会postback一次;

终于发现,问题在这:

protected void Page_Load(object sender, EventArgs e)
{
this.lb_message.Text = "";

bindGrid();
InitDropDownList();
}

应该为:
protected void Page_Load(object sender, EventArgs e)
{
this.lb_message.Text = "";
if (!IsPostBack)
{
bindGrid();
InitDropDownList();
}
}


  做了上面修改时,问题解决。

每个出现的问题,都体现了自己一些知识的不足,对操作的原理还不是很了解。以后更应该虚心求教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐