Почему экранирующие символы нарушают мой вызов Telerik в ResponseScripts.Add (string)? - PullRequest
0 голосов
/ 15 апреля 2010

отображает ожидаемое окно сообщения о предупреждении JavaScript:

RadAjaxManager1.ResponseScripts.Add("alert('blahblahblah');");

, хотя это не так:

RadAjaxManager1.ResponseScripts.Add("alert('blahblah \n blahblahblah');");
RadAjaxManager1.ResponseScripts.Add("alert('blahblah \r blahblahblah');");
RadAjaxManager1.ResponseScripts.Add("alert('blahblah \r\n blahblahblah');");
RadAjaxManager1.ResponseScripts.Add("alert('blahblah \n\t blahblahblah');");
RadAjaxManager1.ResponseScripts.Add(@"alert('blahblah \n blahblahblah');");
string message = "blahblahblah \n blahblahblah";
RadAjaxManager1.ResponseScripts.Add(message);

Я не могу найти документацию по экранирующим символам, нарушающим это Я понимаю, что однострочный аргумент метода Add может быть любым скриптом. Не выдается никакой ошибки, поэтому мое лучшее предположение - искаженный JavaScript.

1 Ответ

2 голосов
/ 15 апреля 2010

\ n, который вы добавляете в строку, фактически анализируется в .NET как новая строка, и поэтому он поступает на клиент как таковой. Например:

setTimeout(function(){alert('blahblah 
blahblahblah');}, 0);

Вышеприведенный код недействителен и не будет выполняться. Чтобы иметь фактический \ n в клиентском скрипте, вы должны экранировать его в коде сервера как \ n. Например:

RadAjaxManager1.ResponseScripts.Add("alert('blahblah \\n blahblahblah');");

выведет:

setTimeout(function(){alert('blahblah \n blahblahblah');}, 0);
...