我想通过注册脚本来显示来自我的asp.net页面的消息,有时甚至是来自错误的异常代码。我使用这段代码:
ScriptManager.RegisterStartupScript(this, Page.GetType(), "NoDept", "alert('Adjustments require the Total Amount to be ZERO to post!');", true);
如果我可以决定在开发过程中显示的信息,这很有用,但是如果我想显示来自应用程序的数据,它可能包含无效文本,这当然会搞砸脚本并且不会显示。一个例子就是“在消息中”。
当我尝试显示来自异常的消息时遇到问题,例如:
ScriptManager.RegisterStartupScript(this, Page.GetType(), "processError", "alert('" + ptcred.TransactionError + "');", true);
ptcred.TransactionError是ASP.NET异常错误,可能包含无效字符。
在我的alert()函数中处理这些信息的最佳方法是什么,这不会搞砸我的javascript?可能是jQuery可以做些什么来清理它?
编辑:我应该解释一下,我想继续轻松注册一个警报脚本,它简单方便。只是想知道是否有像HTML.Encode这样的东西会清除信息,这会使消息不会搞砸脚本。谢谢, 科里
答案 0 :(得分:3)
您需要转义任何引号字符。
Regex.Replace(ptcred.TransactionError, "(\"|\')", "\\$1");
答案 1 :(得分:3)
您可以调用HttpUtility.JavaScriptStringEncode方法(在ASP.NET 4.0中引入):
ScriptManager.RegisterStartupScript(
this, Page.GetType(), "processError",
"alert('" + HttpUtility.JavaScriptStringEncode(ptcred.TransactionError) + "');",
true);
警告:如果TransactionError
可能包含用户输入的数据,那么正确编码就非常重要,如上所述。否则,您可能会引入安全漏洞并将您的应用程序暴露给跨站点脚本(XSS)攻击。我不知道ChaosPandion的答案(逃避单引号和双引号)是否足以避免XSS。