Asp.net RadioButtonList SelectedIndexChanged通用事件未触发

Asp.net RadioButtonList SelectedIndexChanged通用事件未触发,asp.net,asp.net-4.0,Asp.net,Asp.net 4.0,开发了一个稍微动态的页面,该页面基于数据库中的信息构建问答页面。一切都很好,只是我无法通过一个小的MsgBox响应来触发RadioButtonList事件,以验证对象发送者和选定的ListItem信息 页面加载 有人看到设计有什么问题,或者知道为什么没有触发事件吗 编辑日期:2012-11-20 Ok将rbl对象更改为doAutoPostBack=true,但这让生活变得更加难以忍受;)然后快速返回,因为我的问答列表是随机生成的,因此最终用户在每次单击列表项时都会得到一个新的随机问题顺序 虽然我

开发了一个稍微动态的页面,该页面基于数据库中的信息构建问答页面。一切都很好,只是我无法通过一个小的MsgBox响应来触发RadioButtonList事件,以验证对象发送者和选定的ListItem信息

页面加载 有人看到设计有什么问题,或者知道为什么没有触发事件吗

编辑日期:2012-11-20 Ok将
rbl
对象更改为do
AutoPostBack=true
,但这让生活变得更加难以忍受;)然后快速返回,因为我的问答列表是随机生成的,因此最终用户在每次单击列表项时都会得到一个新的随机问题顺序

虽然我从回调中得到了一些响应,但仍然没有得到JavaScript响应,我希望通过使用已定义的JavaScript文件或内联
响应。Write
/
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
Public Shared Sub Show(消息作为字符串,可选的pg作为页面=Nothing)
Dim cmsg As String=msg.Replace(“'”,“\”)
将scr设置为字符串=“警报(”&cmsg&“);”
如果pg什么都不是
pg=CType(HttpContext.Current.CurrentHandler,第页)
如果结束
如果(pg不是Nothing)而不是(pg.ClientScript.IsClientScriptBlockRegistered(“警报”)),则
pg.ClientScript.RegisterClientScriptBlock(GetType(警报),“警报”,scr)
如果结束
端接头
在页面加载时,此方法按预期激发和,但当放置在SelectedIndexChanged事件中时,它不会激发

仍然困惑于为什么它对一般执行有效,而不是触发执行


为那些喜欢创建实现Javascript的.Net方法的人提供的用户方法

如果不是页面,则必须将其从
中取出。IsPostBack然后

这是因为当你回发邮件时

    AddHandler rbl.SelectedIndexChanged, AddressOf rbl_SelectedIndexChanged
…需要反弹才能开火

因此,基本上,删除
If Not Page.IsPostBack Then
End If

哦,还要去掉
MsgBox()
代码-这将使页面无法执行任何操作。如果要输出
警报()
,请执行以下操作:

    Dim script As String = String.Format("alert('{0}');", ""Radio Button Selected: " & CType(sender, RadioButtonList).ID & " is Correct? " & CType(sender, RadioButtonList).SelectedValue")
    page.ClientScript.RegisterClientScriptBlock(page.[GetType](), "alert", script, True)
更新:


您还需要设置
AutoPostback=true在您的RBL上。这会告诉页面在更改后立即回发。只有当
AutoPostBack
为true时,处理程序才会激发。

母版页/ContentPage是否会产生这种效果?将构建ContentPage主体的逻辑置于回发逻辑之外,但仍然无法获得MsgBox预期的行为。不知道是否有一个设置我错过了。不,不应该影响它。如果您完全不确定,那么在做任何其他事情之前,将构建列表的代码放在页面的preInit中。只是在我的回答中又添加了一些-
MsgBox
可能会杀死你的脚本-它会挂起;不要使用它。MsgBox/Alert最终只用于调试目的。在生产过程中,它将用于跟踪选定的信息。我将实施警报方法。希望远离客户端脚本编写,但我猜我无法摆脱它。因此,如果是为了调试,那么只需执行
响应。编写(“alert(“+YourLongMessage+”);”)
以快速和直接的方式。MsgBox的问题是,您要求服务器显示消息,而他们并不喜欢这样做,他们宁愿崩溃:)好吧,我想我已经修好了……我会在没有回发警报中断的情况下在一分钟内验证。有人知道Javascript警报窗口是否有模式形式,这样它就不会冻结回发行为了吗?
    AddHandler rbl.SelectedIndexChanged, AddressOf rbl_SelectedIndexChanged
    Dim script As String = String.Format("alert('{0}');", ""Radio Button Selected: " & CType(sender, RadioButtonList).ID & " is Correct? " & CType(sender, RadioButtonList).SelectedValue")
    page.ClientScript.RegisterClientScriptBlock(page.[GetType](), "alert", script, True)