在我的asp.net应用程序中,我使用了异步javascript回调。 要求是一旦用户输入邮政编码,就应该调用异步javascript回调函数。服务器端代码必须返回与邮政编码相关的城市。
我所做的编码是:
<asp:TextBox ID="txtPostCode" runat="server" CssClass="textbox" onchange="javascript: getCityAndStreet();" BorderStyle="Ridge" Height="20px" style="margin-left: 10px" Width="442px"></asp:TextBox>
此文本框onchange
会调用javascript function getCityAndStreet()
function getCityAndStreet()
{
var postalCode = document.getElementById('<%=txtPostCode.ClientID%>');
CallServer(postalCode.value, "");
}
function ReceiveCityAndStreet(rValue,context)
{
alert(rValue);
var city = document.getElementById('<%= txtCity.ClientID%>');
city.value = rValue;
}
此处 CallServer 是服务器端运行时javascript,注册如下
protected void Page_Init(object sender, EventArgs e)
{
String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveCityAndStreet", "context",true);
String callbackScript;
callbackScript = "function CallServer(arg, context)" + "{ " + "alert('Entered inside CallServer' + arg);" + cbReference + ";}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);
}
我实现了ICallBackHandler
,我得到了两个方法:
string ICallbackEventHandler.GetCallbackResult()
{
return cityAndStreet;
}
void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
txtStreet.Enabled = true;
txtCity.Enabled = true;
cityAndStreet = eventArgument;
}
page_load函数中的我刚刚禁用了txtStreet.Enabled
。 txtCity.Enabled
文本框和加注回调事件我正在启用它。
这里的问题是RaiseCallBackEvent
无效。我的意思是它没有被隐含地触发。
(此应用程序不能直接在浏览器中通过SharePoint站点访问)
答案 0 :(得分:0)
我认为问题是当你点击它时你的按钮实际上会回发。您不需要回发,因为您使用AJAX调用服务器。尝试将onchage处理程序更改为:
onchange="getCityAndStreet();return false;"
这将导致您的按钮不会触发回发。
编辑:另外我想提一下,你不能在RaiseCallBackEvent方法中更改控件。这不是一个真正的回发。您需要在onSuccess方法中使用javascript启用文本字段。