[下跪求助]关于动态生成出来的按钮调用,为什么我这里只有最后一个按钮生效呢?
'原意是对每一组按钮都进行处理,每一个选择题都对应地出现提示的,
'结果却只有最后一组按钮才有效地出现提示,前面几组按钮都失效了
'请问这里对循环体内的不同组件的命名及调用该如何处理?
'下面是程序源代码,可以直接COPY后运行调试。
'麻烦高手帮忙看一下,按钮那部分代码因该怎样改动
'才能实现我想要的功能呢?
'经调试后发现提交按钮以后各个Radiobutton的value确实已经改变了
'但是除了最后一个按钮有返回到浏览器显示外,其他都没有...
'其实显示只是我想要的基本功能,最主要的是要把数据写回数据库,
'不过如果能解决显示问题相信其它原理也一样了吧....
<%@ Page Language="VB" Debug="true" trace="true" runat="server"%>
<%@Import Namespace="System.Data"%>
<html><head><script language="VB" runat="server">
dim iLoop,cLoop,iNumRows As Integer
dim Choicer1 As HtmlInputRadioButton
dim Choicer2 As HtmlInputRadioButton
dim Choicer3 As HtmlInputRadioButton
dim Choicer4 As HtmlInputRadioButton
' dim Choice1 As RadioButtonList
dim Label_Cho As Label
Dim NewButtonControl As New HtmlButton()
'这里原意是对每一组按钮都进行处理,每一个选择题都对应地出现提示的,
'结果却只有最后一组按钮才有效地出现提示,前面几组按钮都失效了
'请问这里对循环体内的不同组件的命名及调用该如何处理?
public Sub Button_Click(sender As Object, e As EventArgs)
If Choicer1.Checked = True Then
' 提交后显示信息
Message.InnerHtml = "你选择的答案是A,你的答案已提交了!"
End if
If Choicer2.Checked = True Then
' 提交后显示信息
Message.InnerHtml = "你选择的答案是B,你的答案已提交了!"
End if
If Choicer3.Checked = True Then
' 提交后显示信息
Message.InnerHtml = "你选择的答案是C,你的答案已提交了!"
End if
If Choicer4.Checked = True Then
' 提交后显示信息
Message.InnerHtml = "你选择的答案是D,你的答案已提交了!"
End if
End Sub
Sub Page_load(sender AS Object,e As EventArgs)
dim iNUmRows AS Integer
INumRows=4
For iLoop=0 To iNumRows-1
Label_Cho=New Label
Label_Cho.Text="第"& (iLoop+1).ToString & "题" &"<br>"
Bullseys.Controls.Add(Label_Cho)
Choicer1=New HtmlInputRadioButton()
Label_Cho=New Label
Label_Cho.Text=""&"A."&""& (1.23*(iLoop+1)).Tostring &"<br>"
Choicer1.Value = "Value1"
Choicer1.Checked = false
Choicer1.Name = "RadioSet"&iLoop
Choicer1.ID="Choicer1"&iLoop
Bullseys.Controls.Add(Choicer1)
Bullseys.Controls.Add(Label_Cho)
' Bullseys.Controls.Add(Choice1)
Choicer2=New HtmlInputRadioButton()
Label_Cho=New Label
Label_Cho.Text=""&"B."&""& (1.45*(iLoop+1)).Tostring &"<br>"
Choicer2.Value = "Value2"
Choicer2.Checked = false
Choicer2.Name = "RadioSet"&iLoop
Choicer2.ID="Choicer2"&iLoop
Bullseys.Controls.Add(Choicer2)
Bullseys.Controls.Add(Label_Cho)
Choicer3=New HtmlInputRadioButton()
Label_Cho=New Label
Label_Cho.Text=""&"C."&""& (1.56*(iLoop+1)).Tostring &"<br>"
Choicer3.Value = "Value3"
Choicer3.Checked = false
Choicer3.Name = "RadioSet"&iLoop
Choicer3.ID="Choicer3"&iLoop
Bullseys.Controls.Add(Choicer3)
Bullseys.Controls.Add(Label_Cho)
Choicer4=New HtmlInputRadioButton()
Label_Cho=New Label
Label_Cho.Text=""&"D."&""&(1.67*(iLoop+1)).Tostring &"<br>"
Choicer4.Value = "Value4"
Choicer4.Checked = false
Choicer4.Name = "RadioSet"&iLoop
Choicer4.ID="Choicer4"&iLoop
Bullseys.Controls.Add(Choicer4)
Bullseys.Controls.Add(Label_Cho)
dim Clicker As HtmlButton=New HtmlButton()
Clicker.InnerText="提交答案"
Clicker.ID = "Clicker1"&iLoop
AddHandler Clicker.ServerClick, AddressOf Button_Click
Bullseys.Controls.Add(Clicker)
Label_Cho=New Label
Label_Cho.Text="<br>"
Bullseys.Controls.Add(Label_Cho)
Next iLoop
End Sub
</script><meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>选择题测试</title>
</head>
<body bgcolor="#CCCCCC">
<form runat="server"><p>
<asp:placeholder ID="Bullseys" runat="server"/>
</p>
<p><span ID="Message"
runat="server"/></p>
</form>
</body>
</html>
问题点数:0、回复次数:9Top
1 楼scocsdn(发菜)回复于 2004-05-03 11:19:41 得分 0
帮顶Top
2 楼littleqiang520(小强.NET)回复于 2004-05-03 11:26:41 得分 0
HtmlInputRadioButton 要设置为同一组,name属性都要相同Top
3 楼Mybeautiful(天之痕)回复于 2004-05-03 11:34:40 得分 0
HtmlInputRadioButton 要设置为同一组,name属性都要相同
不是name属性吧?应该是groupname(好像是,楼主看看)Top
4 楼46539492(男儿当自强(http://blog.csdn.net/46539492/))回复于 2004-05-03 12:22:34 得分 0
楼上的兄弟说的对!Top
5 楼jiaqingchen(蓝色星期天)回复于 2004-05-03 16:17:54 得分 0
Choicer1.Name = "RadioSet"&iLoop
Choicer2.Name = "RadioSet"&iLoop
Choicer3.Name = "RadioSet"&iLoop
Choicer4.Name = "RadioSet"&iLoop
在同一组内的RadioButton的name属性已经设为同一组了啊,因为循环一次的时候出现四个选项,每一个选项的name都是一样的......
再说最后一个按钮点击后也确实出现了可以辨认效果,只是前面几个按钮都没有反应而已...
继续顶Top
6 楼jiaqingchen(蓝色星期天)回复于 2004-05-03 16:24:05 得分 0
PS:因为我这里用的是HTMLRadioButton而不是RadioButton,所以应该是name属性而不是GroupName属性吧?Top
7 楼jiaqingchen(蓝色星期天)回复于 2004-05-03 17:22:33 得分 0
55,急死我也,大哥们快来帮帮忙啊!!Top
8 楼kenalzb(kenalzb)回复于 2004-05-04 08:50:27 得分 0
你可以在程序运行时使用FindControl方法:例如:
int i,j;
j=menulbsl;
string zzqxlb;
zzqxlb="";
for(i=0;i< j;i++)
{
CheckBox cb;
cb=(CheckBox)this.Place.FindControl("gnmk"+i.ToString());
if (cb.Checked) //如果被选中
{
zzqxlb=zzqxlb+cb.Text.Trim();
zzqxlb=zzqxlb+',';
}
}Top
9 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2004-05-04 11:04:59 得分 0
你的意思是不是你显示若干到4选1的选择题,然后每一道题旁边都有一个button,按这个button的时候就显示这道题选了什么?
第一个建议当然是把一道题封装成WebControl。这时候好像需要实现一个INamingContainer的接口(这个仅仅是“标记接口”,标记了就行),用这个接口标记你的WebControl后,Page就会自动更改这个WebControl内子控件的名字以免页面内出现重复命名。
第二个建议就是用asp的思路来做。以前在asp要做这样的事情不难,因为HTML中的RadioButton在提交的时候不是面向RadioButton.Name而是面向RadioButton.GroupName的。这是什么意思?就是说如果你有一个叫choice的group,内涵A,B,C,D四个RadioButton,那么提交的数据就是choice="C"这样的。至于C.Check,则是.NET自动判断出来的。我们要做的就是直接读某一个Group的值,例如Request.Form["choice"],这是读取出来的就是choice这个group被选中的那个选项的value。
注:建议二我没测试过,这仅仅是根据asp/html的经验提供的建议。至于一个RadioButton的各个属性对应一个<input...>中的哪些部分就要你实际测试了。Top




