【问题标题】:Setting js to execute from server in ASP.NET Application在 ASP.NET 应用程序中设置 js 从服务器执行
【发布时间】:2011-04-28 16:08:16
【问题描述】:

我正在开发一个 asp.net 应用程序。使用了很多 UpdatePanel。是否有任何“最佳实践”方法来设置一些 js 脚本以在 updatePanel 刷新后执行。 (重要的是:js 脚本不是静态的——例如,我正在处理我的服务器端代码中的异常,我需要在刷新 updatePanel 后让用户意识到这个异常)

目前我正在使用以下解决方案:

<asp:Hidden id="scriptsHiddenField" runat="server" />

在服务器端,我正在传递这样的脚本:

catch (Exception exception) {
   scriptsHiddenField.Value += String.Format("alert('Oops! Error occured: {0}');", exception.Message);
}

我正在通过以下方式评估 endRequest 事件的脚本:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);

function endRequestHandler(sender, args) {
    eval($('#<%= scriptsHiddenField.ClientID %>').val());
    $('#<%= scriptsHiddenField.ClientID %>').val('');
}

这只是一个简化的例子,所以基本上不仅仅是错误处理必须像那样工作。通常从服务器传递过来的脚本比较复杂,所以我对这种方式的评估 js 有不好的感觉。

【问题讨论】:

    标签: javascript asp.net updatepanel


    【解决方案1】:

    我们一直在做类似的事情。这是一个在更新面板刷新时调用 javascript 警报的函数。

    public static void ShowInUpdatePanel(string message, UpdatePanel up)
    {
        //Cleans the message to allow single quotation marks
        string cleanMessage = message.Replace("'", "\\'");
        string script = "<script type='text/javascript'>alert('" + cleanMessage + "');</script>";
        ScriptManager.RegisterStartupScript(up, up.GetType(), "alert" + DateTime.Now.Millisecond.ToString(), script, false);
    
    }
    

    【讨论】:

      【解决方案2】:
      ScriptManager.RegisterStartupScript(this, GetType(), "somenameyouwanttouse", "alert('xyz');", true);
      

      Edit:最后一个参数定义是否要自动发出 SCRIPT 标签。忘记了我最初的答案。

      另外,ClientScript.RegisterStartupScript 类似,但如果我没记错的话,不会在每次异步回发(仅第一个)之后运行。

      【讨论】:

      • 我已经试过了 - 问题是它在经常使用的异步 updatePanel 刷新后不起作用。
      • 也许我在回答中颠倒了 ClientScript 与 ScriptManager,但它确实有效。我们一直这样做。
      • 您的 ToolkitScriptManager 是在 UpdatePanel 内部还是外部?
      • 当我为 UpdatePanel 注册启动脚本时,它在我的页面上运行良好,所以我猜这是因为整个页面没有刷新 = 没有启动脚本执行。
      【解决方案3】:

      您是否尝试过注册要在更新后运行的启动脚本?

      catch (Exception exception)
      {
            ScriptManager.RegisterStartupScript(this, this.Page.GetType(), "errkey", "alert('Oops! Error occured: " + exception.Message + "');", true);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-12
        • 1970-01-01
        • 2010-12-18
        • 2020-08-13
        • 2017-11-17
        相关资源
        最近更新 更多