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