在后台调用alert时,导致js阻塞,前台的CollapsiblePanelExtender以默认方式展开。
fix bug:
使用setTimeout函数,在js运行完成后再调用alert,这样就不会造成阻塞。
后台调用alert如下:
private void ShowAlert(string message)
{
ScriptManager.RegisterStartupScript(Page, typeof(PageEx),
message.GetHashCode().ToString(),
string.Format("setTimeout(function(){{alert('{0}')}}, 0);", Senia.BBKing.WebConstrols.Core.JavaScriptBuilder.ApplyEscapeSequences(message)),
true);
}
注意, string.Format函数中如果其字符串中出现了“{”字符,则“{”字符必须转义。
C# 中使用类似 {0}, {1:yyyy-MM-dd} 这样的格式占位符,如果被格式化字符串本身包含 { 或者 } 怎么办呢?答案是:用两个 { 或者 }连写表示单个。
例如
string str1 = String.Format("{{Hello}}, {0}, Now is {{{1:yyyy-MM-dd HH:mm:ss}}}",
"Jinglecat",
DateTime.Now); // {Hello}, Jinglecat, Now is {2007-07-18 23:06:35}
事实上,很多情况下带特殊含义的字符都是这样转义的:如,
C# 中,当字符串常量带 @ 前导的时候,用两个 " 连写表示一个 " (半角双引号)
string str3 = @"My UserName is ""Jinglecat""."; // My UserName is "Jinglecat".
SQL 字符串常量,用两个 ' 连写表示一个 ' (半角单引号)
DECLARE @str6 varchar(100)
SET @str6 = 'My UserName is ''Jinglecat''.'
PRINT @str6 -- My UserName is 'Jinglecat'.
参考资料:
http://www.cnblogs.com/linyechengwei/archive/2009/11/17/1604509.html