我正在使用 ASP.net,后面带有 VB.net 代码。
页面成功使用 ScriptManager.RegisterStartupScript 从多个 asp:DropdownList OnSelectedIndexChanged 事件执行 Javascript 函数。每个下拉列表都有属性 AutoPostBack="True"。在这些情况下,背后的代码和 ScriptManager 都可以完美执行。
我需要添加 (3) asp:RadioButtons。每个都使用 OnCheckedChanged 并使用 AutoPostBack="True" ,如下拉菜单。与 DropDown 不同,除了 ScriptManager 之外,后面代码中的所有代码都按预期执行。它似乎是唯一始终失败的事情,并且在 RadioButton 和 OnCheckChanged 的组合上总是失败。
我尝试将 ScriptManager 的位置从代码的最后一个元素更改为第一个元素。尝试删除除 ScriptManager 之外的所有代码,但仍然失败。
我将我的 javascript 函数绑定到一个按钮,这样在页面呈现后,我可以确认我的函数是否有效。确实如此。
我尝试添加 onclick 事件。让它直接调用函数并返回。它可以运行 javascript,但不会运行后面的 OnCheckedChange 代码。看起来像这样:
<asp:RadioButton runat="server" ID="radApptN" value="A" GroupName="radAppt" text=" Add New" AutoPostBack="true" checked="true" onclick="return gotoCalView();" OnCheckedChanged="radAppt_OnChanged" />
如果我将脚本调用放入 Body Onload 中,它可以工作,但是,我不希望它一直触发。
认为这可能与 PostBack 处理不与 OnSelectedIndexChanged 相同有关。我尝试了以下方法。没成功。
Page.ClientScript.RegisterStartupScript(me, me.GetType(),"CallView","window.onload = function(){ gotoCalView(); }",true)
这不应该像放入 Body Onload 调用一样工作吗?
阅读示例文章后,有很多关于使用更新面板的问题。我不在这个页面。
有什么建议可以尝试但我可能错过了?感觉就像撞到了砖墙。
您必须发布更多代码。
ScriptManger 应始终放置在表单标签之后。
不清楚为什么使用 3 个 RadioButtons 而不是使用 RadioButton 列表?
所以,作为一个简单的标记,我有这个:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div style="padding:35px">
<asp:DropDownList ID="cboHotels" runat="server"
DataValueField="ID"
DataTextField="HotelName"
AutoPostBack="true"
OnSelectedIndexChanged="cboHotels_SelectedIndexChanged"
>
</asp:DropDownList>
<asp:RadioButton ID="RB1" runat="server"
Text="RB1" GroupName="BT" AutoPostBack="true"
OnCheckedChanged="RB1_CheckedChanged"
/>
<asp:RadioButton ID="RB2" runat="server"
Text="RB2" GroupName="BT" AutoPostBack="true"
OnCheckedChanged="RB2_CheckedChanged"
/>
<asp:RadioButton ID="RB3" runat="server"
Text="RB3" GroupName="BT" AutoPostBack="true"
OnCheckedChanged="RB3_CheckedChanged"
/>
<script>
function myfun(sValue) {
alert('this is the client side script from ' + sValue)
}
</script>
</div>
</form>
背后的代码是这样的:
(请记住,页面加载总是在事件代码运行之前运行。甚至在使用更新面板时也是如此。
因此,一如既往,任何设置代码、组合框加载代码等当然都必须放置在“如果不是回发”代码存根中。如果我每次都说出加载组合框的代码,那么我每次都会丢失用户在组合框中的选择。
所以,背后的代码是这样的:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
cboHotels.DataSource =
MyRst("SELECT ID, HotelName FROM tblHotelsA ORDER BY HotelName")
cboHotels.DataBind()
cboHotels.Items.Insert(0, New ListItem("Select Hotel", "0"))
End If
End Sub
Protected Sub RB1_CheckedChanged(sender As Object, e As EventArgs)
Dim sJava As String = "myfun('RB1')"
ScriptManager.RegisterStartupScript(Page, Page.GetType, "myftest", sJava, True)
End Sub
Protected Sub RB2_CheckedChanged(sender As Object, e As EventArgs)
Dim sJava As String = "myfun('RB2')"
ScriptManager.RegisterStartupScript(Page, Page.GetType, "myftest", sJava, True)
End Sub
Protected Sub RB3_CheckedChanged(sender As Object, e As EventArgs)
Dim sJava As String = "myfun('RB2')"
ScriptManager.RegisterStartupScript(Page, Page.GetType, "myftest", sJava, True)
End Sub
Protected Sub cboHotels_SelectedIndexChanged(sender As Object, e As EventArgs)
Dim sJava As String = "myfun('Combo box')"
ScriptManager.RegisterStartupScript(Page, Page.GetType, "myftest", sJava, True)
End Sub
现在的结果是这样的:
到目前为止,根据您提供的内容,如上所示,效果很好。
因此,我不得不假设我们在这里缺少一些额外的细节,或者这里可能正在使用更新面板?