ASP.NET 动态输出Javascript 文本格式换行问题 [ASP.NET | C# | Response]
一、普通輸出問(wèn)題分析、測(cè)試
??????????1.?????我們先來(lái)看一段代碼:
????///?<summary>????///?連接接數(shù)據(jù)庫(kù)
????///?</summary>
????///?<param?name="sender"></param>
????///?<param?name="e"></param>
????protected?void?btnConnect_Click(object?sender,?EventArgs?e)
????{
????????try
????????{
????????????///此處填寫(xiě)連接數(shù)據(jù)庫(kù)的代碼
????????}
????????catch?(Exception?ex)
????????{
????????????Response.Write(Alert(string.Concat("連接失敗!!出錯(cuò)原因:",?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>");?;
????}
??????????說(shuō)明分析:這里調(diào)用方法btnConnect_Click讓他衡失敗,比如連接字符串錯(cuò)誤,這里假設(shè)連接字符串為:Data Source=.\;Initial Catalog=test;User ID=sa;Password=sa??。那么調(diào)試時(shí)ex.Message信息會(huì)顯示"無(wú)法打開(kāi)登錄 'test' 中請(qǐng)求的數(shù)據(jù)庫(kù)。登錄失敗。\r\n用戶 'sa' 登錄失敗。",那么現(xiàn)在我可以很肯定的告訴你,你直接輸出肯定會(huì)報(bào)Javascript錯(cuò)誤,顯示"?確實(shí)')'?",跟蹤發(fā)現(xiàn)它輸出的字符串如下:
<script?language="javascript"?type="text/javascript">alert('連接失敗!!出錯(cuò)原因:無(wú)法打開(kāi)登錄?'test'?中請(qǐng)求的數(shù)據(jù)庫(kù)。登錄失敗。用戶?'sa'?登錄失敗。');</script>
???????????我們把這代碼直接復(fù)制到ASPX頁(yè)面里,果然報(bào)錯(cuò),而且錯(cuò)誤也比較明顯了,alert輸出的信息不在一行上,也不支持C# 的'@'?,問(wèn)題就出在這里了!!
二、解決辦法[參考帖子: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());
????????}
??????????代碼說(shuō)明:大家注意紅色的代碼部分,是代碼的關(guān)鍵,替換信息內(nèi)所含的換行,自己手動(dòng)增加換換行符號(hào),并且拼接字符串,防止字符串過(guò)長(zhǎng)。測(cè)試后,跟蹤調(diào)試輸出字符串如下:
<script?language="javascript"?type="text/javascript">???var?msg?=?'';
msg+='連接失敗!!出錯(cuò)原因';
msg+=':無(wú)法打開(kāi)登錄??t';
msg+='est??中請(qǐng)求的數(shù)';
msg+='據(jù)庫(kù)。登錄失敗。';
msg+='用戶??sa??登錄';
msg+='失敗。';
alert(msg);</script>
? ??本文轉(zhuǎn)自博客園農(nóng)民伯伯的博客,原文鏈接:ASP.NET 動(dòng)態(tài)輸出Javascript 文本格式換行問(wèn)題 [ASP.NET | C# | Response],如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原博主。
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的ASP.NET 动态输出Javascript 文本格式换行问题 [ASP.NET | C# | Response]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解密迈向量产的百度Apollo自动驾驶技
- 下一篇: 【云上ELK系列】Logstash迁移E