我正在开发一个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感觉不好。
答案 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);
}