2013-08-28 101 views
0

中的RegisterStartupScript警报错误我的RegisterStartupScript在代码隐藏类提醒错误信息 - 它工作得很好,除了当错误已经换行或回车(我认为)。下面是摘录:当回车是字符串

注释代码工作正常!

catch (Exception ex) 
     { 
      //Page.ClientScript.ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Failure", "alert('ERROR: '), true); 
      Page.ClientScript.RegisterStartupScript(this.GetType(), "System Error", "alert('" + ex.Message.Replace("'", "\\'") + "');", true); 
     } 
+0

所以,我不知道我明白这个问题。你是说你的错误出错了吗? – paqogomez

+0

警报消息从不出现。 – user1967701

+0

请阅读[“SQL注入”](http://en.wikipedia.org/wiki/SQL_injection) - 它适用于许多语言/条件(包括你的) - 由用户提供的串/外部实体不能被放置转换为没有适当编码的脚本,或者更好的语言特定机制来传递文本值。 –

回答

0

行结束符不允许在js字符串中。 使用正则表达式消除行终止符(回车符,新行符号等):

var errorMsg = Regex.Replace(ex.Message, 
    @"[\u000A|\u000D|\u2029\u2028|\u000D\u000A]", " "); 

Page.ClientScript.RegisterStartupScript(this.GetType(), "System Error", 
    String.Format("alert('{0}');", errorMsg), true); 
+0

我试过了,仍然没有工作 - 警报从未出现 - 但是,作为测试,如果我将errorMsg值硬编码为常规字符串,则警报会出现! – user1967701

+0

您应该尝试启动一个萤火虫并检查特定的js错误。在调试模式下,尝试复制ex.Message属性的值并检查它是否有无效符号。 –