ASP.NET 动态输出Javascript 文本格式换行问题 [ASP.NET | C# | Response]
一、普通輸出問題分析、測試
??????????1.?????我們先來看一段代碼:
????///?<summary>????///?連接接數據庫
????///?</summary>
????///?<param?name="sender"></param>
????///?<param?name="e"></param>
????protected?void?btnConnect_Click(object?sender,?EventArgs?e)
????{
????????try
????????{
????????????///此處填寫連接數據庫的代碼
????????}
????????catch?(Exception?ex)
????????{
????????????Response.Write(Alert(string.Concat("連接失敗!!出錯原因:",?ex.Message)));
????????}
????}
????///?<summary>
????///?彈出信息
????///?????<script?language="javascript"?type="text/javascript">
????///?????????alert(msg);
????///?????</script>
????///?</summary>
????///?<param?name="msg"></param>
????///?<returns></returns>
????public?static?string?Alert(string?msg)
????{
????????return?Javascript(string.Concat("alert('",msg,"');"));
????}
????///?<summary>
????///?輸出Javascript代碼
????///?????<script?language="javascript"?type="text/javascript">
????///?????????alert("彈出框例子!");
????///?????</script>
????///?</summary>
????///?<param?name="context"></param>
????///?<returns></returns>
????public?static?string?Javascript(string?context)
????{
????????return?string.Concat("<script?language=\"javascript\"?type=\"text/javascript\">",?context,?"</script>");?;
????}
??????????說明分析:這里調用方法btnConnect_Click讓他衡失敗,比如連接字符串錯誤,這里假設連接字符串為:Data Source=.\;Initial Catalog=test;User ID=sa;Password=sa??。那么調試時ex.Message信息會顯示"無法打開登錄 'test' 中請求的數據庫。登錄失敗。\r\n用戶 'sa' 登錄失敗。",那么現在我可以很肯定的告訴你,你直接輸出肯定會報Javascript錯誤,顯示"?確實')'?",跟蹤發現它輸出的字符串如下:
<script?language="javascript"?type="text/javascript">alert('連接失敗!!出錯原因:無法打開登錄?'test'?中請求的數據庫。登錄失敗。用戶?'sa'?登錄失敗。');</script>
???????????我們把這代碼直接復制到ASPX頁面里,果然報錯,而且錯誤也比較明顯了,alert輸出的信息不在一行上,也不支持C# 的'@'?,問題就出在這里了!!
二、解決辦法[參考帖子:http://topic.csdn.net/u/20080505/15/3b9c038d-f82d-429f-b093-00e92fdca295.html]
???????????修改后的代碼如下,Javascript方法不變,僅僅修改Alert方法,代碼如下:
????????///?<summary>????????///?彈出信息
????????///?????<script?language="javascript"?type="text/javascript">
????????///?????????alert(msg);
????????///?????</script>
????????///?</summary>
????????///?<param?name="msg"></param>
????????///?<returns></returns>
????????public?static?string?Alert(string?msg)
????????{
????????????StringBuilder?html?=?new?StringBuilder();
????????????msg?=?msg.Replace("'","?");
????????????html.AppendLine();
????????????html.Append("???var?msg?=?'';");
????????????html.AppendLine();
????????????for?(int?i?=?0,?j?=?msg.Length;?i?<?j;)
????????????{
????????????????if?(i?+?10?<=?j)
????????????????{
????????????????????html.Append("msg+='");
????????????????????html.Append(msg.Substring(i,?10).Replace(System.Environment.NewLine,?string.Empty));
????????????????????html.Append("';");
????????????????????html.AppendLine();
????????????????????i?+=?10;
????????????????}
????????????????else
????????????????{
????????????????????html.Append("msg+='");
????????????????????html.Append(msg.Substring(i).Replace(System.Environment.NewLine,?string.Empty));
????????????????????html.Append("';");
????????????????????html.AppendLine();
????????????????????break;
????????????????}
????????????}
????????????html.Append("alert(msg);");
????????????return?Javascript(html.ToString());
????????}
??????????代碼說明:大家注意紅色的代碼部分,是代碼的關鍵,替換信息內所含的換行,自己手動增加換換行符號,并且拼接字符串,防止字符串過長。測試后,跟蹤調試輸出字符串如下:
<script?language="javascript"?type="text/javascript">???var?msg?=?'';
msg+='連接失敗!!出錯原因';
msg+=':無法打開登錄??t';
msg+='est??中請求的數';
msg+='據庫。登錄失敗。';
msg+='用戶??sa??登錄';
msg+='失敗。';
alert(msg);</script>
? ??本文轉自博客園農民伯伯的博客,原文鏈接:ASP.NET 動態輸出Javascript 文本格式換行問題 [ASP.NET | C# | Response],如需轉載請自行聯系原博主。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的ASP.NET 动态输出Javascript 文本格式换行问题 [ASP.NET | C# | Response]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解密迈向量产的百度Apollo自动驾驶技
- 下一篇: 【云上ELK系列】Logstash迁移E