ASP.Net – AJAX UpdatePanel中的Javascript

前端之家收集整理的这篇文章主要介绍了ASP.Net – AJAX UpdatePanel中的Javascript前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在遇到一个问题,从UpdatePanel中的外部 javascript文件运行javascript.我试图让一个在ListView里面工作的颜色选择器. ListView位于UpdatePanel内.

我正在使用this color picker.

这是我把它缩小到:

>如果我在UpdatePanel之外的文本框上使用颜色选择器,那么所有的回发都可以很好地工作.
>如果我在UpdatePanel内的文本框上使用颜色选择器,它可以工作,直到我做异步回发(点击ListView中的“编辑”按钮). UpdatePanel完成回发后,当单击时,文本框将不再显示颜色选择器.当TextBox位于ListView的InsertItemTemplate或EditItemTemplate中时也会发生这种情况.

如果你想复制它,只需下载颜色选择器(它是免费的),然后添加到一个网页…

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

<div>
    <asp:UpdatePanel ID="panel1" runat="server">
        <ContentTemplate>
            <asp:TextBox runat="server" ID="textBox" CssClass="color" />
            <asp:Button ID="Button1" runat="server" Text="Button" />
        </ContentTemplate>
    </asp:UpdatePanel>
</div>

页面加载时,颜色选择器工作正常.当您点击按钮(进行回发)时,颜色选择器将不再工作.

有任何想法吗?

解决方法

在异步往返之后,任何启动脚本都不会运行,这可能是AJAX回调后不起作用的原因.颜色选择器可能具有需要在页面加载时执行的功能.

我遇到这么多次,我写了一个小的方法注册我的脚本在代码隐藏,它处理异步和非异步的往返.这是基本纲要:

private void RegisterClientStartupScript(string scriptKey,string scriptText)
{
    ScriptManager sManager = ScriptManager.GetCurrent(this.Page);

    if (sManager != null && sManager.IsInAsyncPostBack)
    {
        //if a MS AJAX request,use the Scriptmanager class
        ScriptManager.RegisterStartupScript(this.Page,this.Page.GetType(),scriptKey,scriptText,true);
    }
    else
    {
        //if a standard postback,use the standard ClientScript method
        scriptText = string.Concat("Sys.Application.add_load(function(){","});");
        this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(),true);
    }
}

我实际上烤了上面的一个基页类,所以我正在使用的任何页面都可以调用this.RegisterClientStartupScript(…).要做到这一点,只需创建一个基础页面类,并将其包含在那里(确保标记保护不是私有的,否则您继承的页面类将无法访问它).

使用上述代码,我可以自信地注册客户端脚本,而不管该页面是做回发还是回调.意识到您正在使用外部脚本文件,您可以修改上述方法注册外部脚本,而不是内联.有关更多详细信息,请参阅ScriptManager课程,因为有几种脚本注册方法

猜你在找的asp.Net相关文章