2013-03-06 249 views
6

警報換行符我在Page.aspx.cs文件這樣的代碼:在回覆於ASP.NET從代碼隱藏

void btnSessionCreate_Click(object sender, EventArgs e) 
{ 
     if (Session["user"] == null) 
     { 
      Session["user"] = Guid.NewGuid().ToString(); 
      Response.Redirect("/"); 
     } 
     else if (Session["user"] != null) 
     { 
      string userBrowser = Request.UserAgent.ToString(); 
      string sessionId = Session["user"].ToString(); 

      Response.Write("<script>alert('" + sessionId + "\r\n" + userBrowser + "');</script>"); 
     } 
} 

的主要問題是 「\ r \ n」 個部分()方法。我想用換行符分隔數據,但不能!

如果沒有「\ r \ n」,腳本會提醒您,但如果代碼中存在,則不會發出警報並正在更改重置其CSS樣式。

爲什麼?

+2

您不應該使用response.write來輸出JavaScript。糟糕的設計。看看'RegisterStartupscript'! – epascarello 2013-03-06 19:09:01

+0

@epascarello爲什麼我不能使用它? – Secret 2013-03-06 19:11:13

+0

Response.Write可能會搞砸了這個流,當它被髮送時它不可靠。使用代碼中內置的方法來註冊JavaScript。 – epascarello 2013-03-06 19:16:57

回答

6

使用@符號或雙\\逃跑的斜線

string script = String.Format(@"<script>alert('{0}\r\n{1}');</script>", sessionId, userBrowser); 

OR

string script = String.Format("<script>alert('{0}\\r\\n{1}');</script>", sessionId, userBrowser); 

Client.RegisterStartupScript(this.GetType(), "myscript", script, true); 

More info on Client.RegisterStartupScript here

+0

感謝您的回答,我爲您提供了有關RegisterScript方法的另一個小問題。如果我註冊它,我怎麼能從CodeBehind的任何地方調用它呢?謝謝! – Secret 2013-03-06 19:22:18

+0

你可以在任何地方調用它 - button_click,page_load等等。它會在你的頁面中插入一個JavaScript代碼片段,它會在你的頁面被加載/重載後立即生效。在這種腳本中聲明的任何函數都應該可用於您的頁面。試試看看它是如何工作的。 – codingbiz 2013-03-06 21:15:54

1

你只需要逃避\,使他們成爲\時輸出爲JavaScript:

Response.Write("<script>alert('" + sessionId + "\\r\\n" + userBrowser + "');</script>"); 

或者:

Response.Write("<script>alert('" + sessionId + @"\r\n" + userBrowser + "');</script>"); 

你是在上述行一個C#背景,因此\r\n被解釋爲需要由Response.Write輸出的新行。那不是你想要的。您希望輸出文字\r\n,因此它們被解釋爲JavaScript換行符。

0

的Response.Write( 「警報('」 +的sessionId +「\ n 「+ userBrowser +」');「);

這將在asp.net中正常工作