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);

}
...全文
182 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
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,代码原封未动。
楼主再看看,应该不会出现那种情况的。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧