【发布时间】:2015-04-28 12:59:51
【问题描述】:
我在服务器端有一个函数填充dropdownlist。我在 Javascript 中使用PageMethods 在客户端单击按钮调用此函数,如下所示:
<asp:ScriptManager ID="smMain" runat="server" EnablePageMethods="true" />
<asp:Button runat="server" ID="SearchButton" Text="Search" OnClientClick="SearchButtonClick();return false;"/>
<asp:DropDownList runat="server" ID="SearchCityDropDownList" Width="100px"/>
和
function SearchButtonClick() {
PageMethods.SearchSearchButtonActivity(onSucess, onError);
}
function onSucess(result) {
alert(result);
}
function onError(result) {
alert('Cannot process your request at the moment, please try later.');
}
服务器端功能:
[WebMethod]
public static string SearchButtonActivity()
{
string result = "Everything is OK!";
foreach (string value in getCityList())
{
SearchCityDropDownList.Items.Add(new ListItem(value));
}
return result;
}
当我运行此代码并单击按钮时,它只显示"Everything is OK!" 警报和
下拉列表仍然是空的。
请帮我解决这个问题,我认为这是一个回发问题,因为当我调试代码时,dropdownlist 的项目已满,但它们没有出现在下拉列表中.
谢谢
【问题讨论】:
-
所以你得到“一切正常!”作为响应,但下拉列表仍然为空,是吗?
-
你在哪里
binddropdownlist?? -
我没有绑定@nadeem,但是当您填写下拉列表的项目时,您可以在网页视图中看到这些项目!
-
我已经有一段时间没有尝试过了,但我认为如果没有 UpdatePanel 或其他形式的 ajaxified 控件,您将无法做到这一点。下拉元素列表存储在视图状态中,我认为在回发之前不会发生变化。虽然已经有一段时间了,所以还是加点盐吧。
-
您混淆了一个事实,即 Web 方法知道任何关于呈现服务器控件的更改 - 它不知道。这只是 AJAX,上面撒了一些 .NET 糖以使其工作。您应该从此方法返回
getCityList()的结果。然后客户端代码负责将项目添加到呈现的 HTML 控件(而不是 服务器控件)。
标签: javascript c# asp.net .net pagemethods