如何在使用 AJAX 时调用下拉列表的子 onchange?
How to call sub onchange of a dropdownlist while using AJAX?
所以,我知道如何使用 ajax 调用单击按钮的方法,但我想在用户在下拉列表中选择新内容时执行相同的操作。我将在下面显示我尝试过的代码:
<asp:UpdatePanel ID="pnlHelloWorld" runat="server">
<ContentTemplate>
<div style="height: auto; overflow: auto; max-height:750px; width:100%;">
<asp:DropDownList ID="mydropdownlist" runat="server" Enabled="true" OnChange="changeMyTable"></asp:DropDownList>
<asp:Table ID="mytable" runat="server"></asp:Table>
</div>
</ContentTemplate>
</asp:UpdatePanel>
在页面的 aspx.vb:
Private Sub changeMyTable()
'Add rows to table
end sub
问题是当我更改下拉列表时 "changeMyTable" 未定义。
我该怎么做?
您正在使用 OnChange
事件从 javascript 调用代码隐藏方法。要访问代码隐藏方法,您需要将该方法转换为 WebMethod
。对于下面的内容,您可以尝试(只是一个例子)
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
<asp:TextBox ID="txtMsg" runat="server"></asp:TextBox>
Javascript代码-
<script type="text/javascript">
function greet(txtN, txtLastN, txtMsg){
var ctrlN = document.getElementById(txtN);
var ctrlLastN = document.getElementById(txtLastN);
var fullName = ctrlN.value + ' ' + ctrlLastN.value;
PageMethods.greetUser(fullName, greetSuccess, greetFailed, txtMsg);
}
function greetSuccess(res, txtMsg) {
var ctrlTxtMsg = document.getElementById(txtMsg);
ctrlTxtMsg.value = res;
}
function greetFailed(res, dst) {
alert(res.get_message());
}
</script>
代码隐藏方法 -
<System.Web.Services.WebMethod()> _
Public Shared Function greetUser(ByVal fullName As String) As String
Return "Welcome " & fullName & "!"
End Function
现在您可以从任何地方调用 javascript 函数 greet
,它会触发代码隐藏方法 greetUser
。有关此内容的更多信息 is available here.
所以,我知道如何使用 ajax 调用单击按钮的方法,但我想在用户在下拉列表中选择新内容时执行相同的操作。我将在下面显示我尝试过的代码:
<asp:UpdatePanel ID="pnlHelloWorld" runat="server">
<ContentTemplate>
<div style="height: auto; overflow: auto; max-height:750px; width:100%;">
<asp:DropDownList ID="mydropdownlist" runat="server" Enabled="true" OnChange="changeMyTable"></asp:DropDownList>
<asp:Table ID="mytable" runat="server"></asp:Table>
</div>
</ContentTemplate>
</asp:UpdatePanel>
在页面的 aspx.vb:
Private Sub changeMyTable()
'Add rows to table
end sub
问题是当我更改下拉列表时 "changeMyTable" 未定义。
我该怎么做?
您正在使用 OnChange
事件从 javascript 调用代码隐藏方法。要访问代码隐藏方法,您需要将该方法转换为 WebMethod
。对于下面的内容,您可以尝试(只是一个例子)
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
<asp:TextBox ID="txtMsg" runat="server"></asp:TextBox>
Javascript代码-
<script type="text/javascript">
function greet(txtN, txtLastN, txtMsg){
var ctrlN = document.getElementById(txtN);
var ctrlLastN = document.getElementById(txtLastN);
var fullName = ctrlN.value + ' ' + ctrlLastN.value;
PageMethods.greetUser(fullName, greetSuccess, greetFailed, txtMsg);
}
function greetSuccess(res, txtMsg) {
var ctrlTxtMsg = document.getElementById(txtMsg);
ctrlTxtMsg.value = res;
}
function greetFailed(res, dst) {
alert(res.get_message());
}
</script>
代码隐藏方法 -
<System.Web.Services.WebMethod()> _
Public Shared Function greetUser(ByVal fullName As String) As String
Return "Welcome " & fullName & "!"
End Function
现在您可以从任何地方调用 javascript 函数 greet
,它会触发代码隐藏方法 greetUser
。有关此内容的更多信息 is available here.