2013-03-06 3 views
6

У меня есть такой код в файле Page.aspx.cs:ASP.NET предупреждение новой строки из CodeBehind

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>"); 
     } 
} 

Основная проблема заключается в «\ г \ п» части в Response.Write (метод). Я хотел разделить данные с новой строкой, но не могу!

Если нет «\ r \ n», сценарий хорошо предупреждает, но если он существует в коде, ничего не предупреждает и меняет сбрасывает свой стиль CSS.

Почему?

+2

Вы не должны использовать response.write для вывода JavaScript. Плохой дизайн. Посмотрите на 'RegisterStartupscript'! – epascarello

+0

@epascarello Почему я не должен использовать его? – Secret

+0

Response.Write может испортить поток, и он не будет надежным, когда он будет отправлен. Используйте методы, встроенные в код для регистрации JavaScript. – epascarello

ответ

6

Используйте @ символ или двойной \\, чтобы слеш

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

ИЛИ

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

+0

Вы можете назвать это где угодно - button_click, page_load и т. Д. Он вставляет фрагмент javascript на вашу страницу и вступает в силу сразу после загрузки/перезагрузки вашей страницы. Любая функция, объявленная в таком скрипте, должна быть доступна на вашей странице. Просто попробуйте и посмотрите, как это работает. – codingbiz

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 + "\ п "+ userBrowser +" '); ");

это будет прекрасно работать в asp.net

Смежные вопросы