• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

csdn没人问过吗?checkbox的viewstate问题

zken 2004-10-26 12:45:11
在页面放一个textbox,一个table,下班程序应该能在textbox内容不空的时候改变checkbox的选择,但是不起作用?明明执行了所有的checkbox的checked=false了,为什么还有选中的?
for( int i=0;i<3;i++)
{
CheckBox ck=new CheckBox();
if(this.TextBox1.Text==""&& i==1)
ck.Checked=true;
else
ck.Checked=false;

Table1.Rows.Add(new TableRow());
Table1.Rows[0].Cells.Add(new TableCell());
Table1.Rows[0].Cells[0].Controls.Add(ck);

}
...全文
155 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhn0410 2004-10-28
学习
回复
zken 2004-10-28
给分
回复
zken 2004-10-28
给分
回复
zken 2004-10-28
多谢思归老大
回复
yanyzty 2004-10-26
偶赞同思归的
回复
amendajing 2004-10-26
没遇见过这种问题!
回复
saucer 2004-10-26
请别误导,参考

http://blog.joycode.com/saucer/archive/2004/10/26/36466.aspx
回复
cancersyf 2004-10-26
就是因为viewstate状态的缘故,不过把页面或控件的视图状态都关闭了也不行,不过有解决的方法,就是给动态生成的CheckBox加上一个随机的ID,这样在LoadViewState事件中就找不到上次生成的CheckBox了,不过这个方法不是很理想,正在研究原因。

for( int i=0;i<3;i++)
{
CheckBox ck=new CheckBox();
ck.ID=Guid.NewGuid().ToString();//注意这一句

if(this.TextBox1.Text==""&& i==1)
ck.Checked=true;
else
ck.Checked=false;

Table1.Rows.Add(new TableRow());
Table1.Rows[0].Cells.Add(new TableCell());
Table1.Rows[0].Cells[0].Controls.Add(ck);
}
回复
saucer 2004-10-26
因为你用了动态控件,其值将在Page_Load之后的postback data处理过程中获取,顺便就把你的设置给冲掉了。在Button的Click事件里做

<%@ Page language="c#"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<asp:TextBox id="TextBox1" style="Z-INDEX: 101; LEFT: 168px; POSITION: absolute; TOP: 104px"
runat="server"></asp:TextBox>
<asp:Table id="Table1" style="Z-INDEX: 102; LEFT: 208px; POSITION: absolute; TOP: 248px" runat="server">
<asp:TableRow>
<asp:TableCell></asp:TableCell>
</asp:TableRow>
</asp:Table>
<asp:Button id="Butest" style="Z-INDEX: 103; LEFT: 384px; POSITION: absolute; TOP: 232px" runat="server"
Text="Button" OnClick="Button_Click"></asp:Button></FONT>
</form>
</body>
</HTML>

<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{

for( int i=0;i<3;i++)
{
CheckBox ck=new CheckBox();
//Table1.Rows.Add(new TableRow());
//Table1.Rows[0].Cells.Add(new TableCell());
Table1.Rows[0].Cells[0].Controls.Add(ck);
if (!IsPostBack)
{
if(this.TextBox1.Text==""&& i==1)
ck.Checked=true;
else
ck.Checked=false;

}
}
}

void Button_Click(object sender, System.EventArgs e)
{
for( int i=0;i<3;i++)
{
CheckBox ck= (CheckBox)Table1.Rows[0].Cells[0].Controls[i];
if(this.TextBox1.Text==""&& i==1)
ck.Checked=true;
else
ck.Checked=false;
}
}
</script>

回复
zken 2004-10-26
麻烦亲手试一下
aspx页
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebCheckBox2.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<asp:TextBox id="TextBox1" style="Z-INDEX: 101; LEFT: 168px; POSITION: absolute; TOP: 104px"
runat="server"></asp:TextBox>
<asp:Table id="Table1" style="Z-INDEX: 102; LEFT: 208px; POSITION: absolute; TOP: 248px" runat="server">
<asp:TableRow>
<asp:TableCell></asp:TableCell>
</asp:TableRow>
</asp:Table>
<asp:Button id="Butest" style="Z-INDEX: 103; LEFT: 384px; POSITION: absolute; TOP: 232px" runat="server"
Text="Button"></asp:Button></FONT>
</form>
</body>
</HTML>




cs代码,只有 Page_Load有代码-------------------------

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面

for( int i=0;i<3;i++)
{
CheckBox ck=new CheckBox();
if(this.TextBox1.Text==""&& i==1)
ck.Checked=true;
else
ck.Checked=false;

Table1.Rows.Add(new TableRow());
Table1.Rows[0].Cells.Add(new TableCell());
Table1.Rows[0].Cells[0].Controls.Add(ck);

}

}
回复
cancersyf 2004-10-26
从你给出的代码来看,根本不会出现你说的问题,不妨把全部代码贴出来吧。
回复
zken 2004-10-26
踏雪无痕试过了吗?不试我机器的问题吧,我两台机器全这样。
回复
kuibobo 2004-10-26
帮楼主顶一下
回复
zken 2004-10-26
我要疯了,不知道为什么,代码控制不了checkbox状态
回复
zken 2004-10-26
以上代码放在page的onload中,有你中间的checkbox没有选中?我又试过了,确实是这样。多谢你的帮忙,我是vs2003,在ck。跟踪程序,发现ck。checked=true根本没执行,可是中间的checkbox一直选中。
回复
jkflyfox 2004-10-26
已经测试,在我这边没有checkbox被选中。
我是vs2005,代码原封未动。
楼主再看看,应该不会出现那种情况的。
回复
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2004-10-26 12:45
社区公告
暂无公告