在ASP.NET应用程序中将js设置为从服务器执行

时间:2011-04-28 16:08:17

标签: javascript asp.net updatepanel

我正在开发一个asp.net应用程序。使用了很多UpdatePanel。在updatePanel刷新后,是否有任何“最佳实践”方法可以设置一些js脚本来执行。 (重要的是: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('');
}

这只是一个sipmlified示例,所以基本上它不仅是错误处理必须像那样工作。通常从服务器传递的脚本更复杂,所以我对这种评估js感觉不好。

3 个答案:

答案 0 :(得分:1)

ScriptManager.RegisterStartupScript(this, GetType(), "somenameyouwanttouse", "alert('xyz');", true);

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

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

答案 1 :(得分: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 :(得分:1)

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

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