【问题标题】:Call a Javascript Function after UpdatePanel Postback Issue在 UpdatePanel 回发问题后调用 Javascript 函数
【发布时间】:2011-07-21 16:37:00
【问题描述】:

我的 UpdatePanel 中基本上有一个文字,它根据我的代码隐藏中的方法生成一个 Javascript 数组。

在页面加载时加载我的内容没有问题。但是,如果我尝试执行搜索以更新我的 UpdatePanel 中的 Javascript 数组文字,我发现在 Javascript 已经触发后,文字会在回发时更新。

这是我所拥有的一个基本示例:

<script type="text\javascript">
function BindMyFunction(itemList)
{
    //Do something
}
</script>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>  
<!-- Literal containing generated JS array -->
    <asp:Literal ID="ProfileJavscriptOutput" runat="server"></asp:Literal> 
    <ul id="person-search">
    <li><asp:TextBox ID="TxtFirstname" runat="server" Text=""></asp:TextBox></li>
    <!-- Update Literal onClick -->
        <li><asp:ImageButton CssClass="searchbtn" ID="ImageButton1" runat="server" OnClick="ImageButton1_Click" /></li>
    </ul>    
    <!-- Some jCarousel rendered -->
</asp:UpdatePanel>

我一直在看以下帖子:

ASP.NET - UpdatePanel and JavaScript

call javascript after updatepanel postback

但我似乎无法将其正确应用到我的代码中。

当我不使用UpdatePanel 时,它可以正常工作。但这是一个要求,以便在执行搜索时页面位置不移动。

【问题讨论】:

  • 之前的代码是什么样的,之后又是什么样的?
  • 整个页面加载时如何调用 JavaScript?
  • 你妈妈没告诉过你更新面板不好吗?
  • @Nick 是的,我知道。哈哈!但这是我可以考虑在不刷新 SharePoint 页面的情况下进行回发的唯一方法。
  • 它确实像回帖一样刷新页面,只是您无法从视觉上看出(除了响应不如真正的 AJAX 调用快的事实)。

标签: asp.net ajax dom-events updatepanel


【解决方案1】:

您可以在 Page_Load 事件中添加以下代码:

ScriptManager.RegisterStartupScript(Me.rptGridAlbum, rptGridAlbum.GetType, "scriptname", "somejavascript", True)

这将在 AJAX 回调后触发您页面上的 javascript。

MSDN

【讨论】:

  • 是的,我在获取初始数据时基本上调用了 ScriptManager.RegisterStartupScript,然后在执行搜索以更新 Javascript 时调用它。
  • 太糟糕了,没有给出更好的论点解释,否则这个答案可能会有更多的赞成票
  • 如果您尝试包含整个 javascript 文件,请注意第 4 个参数不是文件的路径,而是实际的 javascript 内容。你可以做类似File.ReadAllText(Server.MapPath("~/Virtual/Path/To/File.js"))
  • 虽然这可行,但似乎在多次调用后在生成的文档中建立了渐进式脚本膨胀。但是,还有另一个idea here
【解决方案2】:

您可以创建一个简单的 webservice 方法,在需要时将 javascript 数组返回到页面,并将对该 webservice 的调用包装在 javascript 方法中。在浏览器端调用 javascript 方法来刷新内存中的数组将比期望在 UpdatePanel 回发成功时再次解析 js 数组文字更好。

【讨论】:

【解决方案3】:
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm != null) {
    prm.add_endRequest(function (sender, e) {
        if (sender._postBackSettings.panelsToUpdate != null) {
            DisplayCurrentTime(); // here your javascript function
        }
    });
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多