开发了一个稍微动态的页面,该页面基于数据库中的信息构建了一个问答页面。一切都很好,除了我无法让 RadioButtonList 事件触发一个次要的 MsgBox 响应来验证对象发送者和选定的 ListItem 信息。
Page_Load
If Not Page.IsPostBack Then
With Globals.tst
.GetBrandInformation(Page.RouteData.Values("brand"),
Page.RouteData.Values("year"),
Page.RouteData.Values("month"))
'Load up Question DataSet
For Each quest As Question In .Questions
Dim tr As New HtmlControls.HtmlTableRow
Dim td As New HtmlControls.HtmlTableCell
td.Attributes.Add("class", "tdQ") 'Add class attribute to <td> element, creating 'class="tdQ"'
Dim lbl As New Label
lbl.ID = "lbl" & quest.ID
lbl.Text = quest.Text
td.Controls.Add(lbl)
tr.Cells.Add(td)
tblContent.Rows.Add(tr)
tr = New HtmlControls.HtmlTableRow
td = New HtmlControls.HtmlTableCell
td.Attributes.Add("class", "tdA") 'Add class attribute to <td> element, creating 'class="tdA"'
Dim rbl As New RadioButtonList
rbl.ID = "rblT" & .ID & "_Q" & quest.ID
AddHandler rbl.SelectedIndexChanged, AddressOf rbl_SelectedIndexChanged 'Attach generic event handler to control
Dim li As New ListItem
'Load up Answer Dataset
For Each answ As Answer In quest.Answers
li.Text = answ.Value
li.Value = "T" & .ID & "-Q" & quest.ID & "-A" & answ.ID & "-C" & answ.Correct
'Add built ListItem to RadioButtonList
rbl.Items.Add(li)
li = New ListItem
Next
td.Controls.Add(rbl)
tr.Cells.Add(td)
tblContent.Rows.Add(tr)
Next
End With
'
End If
下面是我试图附加到 RadioButtonList(s) 的通用事件处理程序逻辑。
Protected Sub rbl_SelectedIndexChanged(sender As Object, e As EventArgs)
MsgBox(CType(sender, RadioButtonList).ID & " Clicked.")
MsgBox("Radio Button Selected: " & CType(sender, RadioButtonList).ID & " is Correct? " & CType(sender, RadioButtonList).SelectedValue)
End Sub
任何人都看到设计有任何问题,或者知道为什么没有触发事件?
2012-11-20 编辑
好的,更改了rbl
要执行的对象,AutoPostBack = true
但这使生活更加难以忍受;)然后迅速恢复为我的问答列表是在问题和答案中随机生成的,因此最终用户将在每次点击时获得新的随机问题顺序的列表项。
尽管我从回调中得到了一些响应,但仍然没有通过使用定义的 JavaScript 文件或内联Response.Write
/得到我期望的 JavaScript 响应ClientScript.Register
。
在内容页面中创建了一个调试方法:
Public Shared Sub Show(msg As String, Optional pg As Page = Nothing)
Dim cmsg As String = msg.Replace("'", "\'")
Dim scr As String = "<script type=""text/javascript"">alert('" & cmsg & "');</script>"
If pg Is Nothing Then
pg = CType(HttpContext.Current.CurrentHandler, Page)
End If
If (pg IsNot Nothing) And Not (pg.ClientScript.IsClientScriptBlockRegistered("alert")) Then
pg.ClientScript.RegisterClientScriptBlock(GetType(Alert), "alert", scr)
End If
End Sub
在页面加载此方法按预期触发,但当放置在 SelectedIndexChanged 事件中时,它永远不会触发。
仍然对为什么它适用于一般执行而不是触发执行感到困惑。
适合那些喜欢创建实现 Javascript 的 .Net 方法的用户的有用方法。.Net Slave - Javascript Alert.Show 类