异步Javascript回调不会触发RaiseCallBackEvent函数

时间:2013-12-30 10:07:34

标签: javascript asp.net ajax sharepoint callback

在我的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.EnabledtxtCity.Enabled文本框和加注回调事件我正在启用它。

这里的问题是RaiseCallBackEvent无效。我的意思是它没有被隐含地触发。

(此应用程序不能直接在浏览器中通过SharePoint站点访问)

1 个答案:

答案 0 :(得分:0)

我认为问题是当你点击它时你的按钮实际上会回发。您不需要回发,因为您使用AJAX调用服务器。尝试将onchage处理程序更改为:

onchange="getCityAndStreet();return false;"

这将导致您的按钮不会触发回发。

编辑:另外我想提一下,你不能在RaiseCallBackEvent方法中更改控件。这不是一个真正的回发。您需要在onSuccess方法中使用javascript启用文本字段。