2012-06-29 3 views
2

У меня есть кнопка и OnClick устанавливается в этот метод, который должен показать простые JS оповещения всплывающее окно:asp.net Javascript сообщение не отображается

string message = "File is already open. <br>Please close the file and try again."; 
    System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    sb.Append("<script type = 'text/javascript'>"); 
    sb.Append("window.onload=function(){"); 
    sb.Append("alert('"); 
    sb.Append(message); 
    sb.Append("')};"); 
    sb.Append("</script>"); 
    ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", sb.ToString()); 

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

Есть ли что-нибудь JS, связанное с загрузкой в ​​<head> страницы aspx?

protected void btnToCSV_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      StreamWriter writer = new StreamWriter(@"\\server location\test.csv"); 

      Some writer.write stuff... 

      writer.Close(); 
     } 
     catch (Exception ex) 
     { 
      lblMessage.Visible = true; 
      string message = "File is already open. Please close the file and try again."; 
      ClientScript.RegisterClientScriptBlock(
       this.GetType(), 
       "alert", 
       string.Format("alert('{0}');", message), 
       true); 

     } 
} 
+0

вы видите какие-либо ошибки JS на странице? –

+0

Как работает таймер для этого? – Goose

ответ

3

Попробуйте с этой simplyfied версии

string message = "File is already open. <br>Please close the file and try again."; 
ScriptManager.RegisterClientScriptBlock(
    UpdatePanel1, // replace UpdatePanel1 by your UpdatePanel id 
    UpdatePanel1.GetType(), // replace UpdatePanel1 by your UpdatePanel id 
    "alert", 
    string.Format("alert('{0}');",message), 
    true); 
+0

Это работает спасибо. Но оно не признает
как новая линия. Что такое тег для этого? – user1468537

+0

@ user1468537: заменить '
' на '\ n'. Ящик предупреждения не понимает html. –

+0

приведенный выше код работает, если у меня есть его на button_click() самостоятельно, но если я поместил его в поле catch (которое все еще находится в методе button_click()), оно больше не работает. Любая идея почему? Я могу проследить весь путь через раздел catch, и он действительно входит. – user1468537

2

Вы здесь ничего не кодирующая:

sb.Append(message); 

Если сообщение Здравствуйте Jean d'Arc (обратите внимание на одинарные кавычки), вы будете в конечном итоге с помощью следующего кода:

alert('Hello Jean d'Arc'); 

Я оставляю вас представить себе результат этого => ошибки JavaScript.

Чтобы исправить эту ошибку, убедитесь, что вы правильно закодировали аргумент. Один из способов сделать это JSON сериализовать:

var serializer = new JavaScriptSerializer(); 
sb.AppendFormat("alert({0});", serializer.Serialize(message)); 

Кроме того, поскольку вы уже includeed в <script> теги, убедитесь, что вы передаете ложь в качестве последнего аргумента функции RegisterClientScriptBlock, чтобы избежать добавления их дважды:

ClientScript.RegisterClientScriptBlock(
    this.GetType(), 
    "alert", 
    sb.ToString(), 
    false   // <!---- HERE 
); 

А вот как полный код может выглядеть следующим образом:

var message = "File is already open. <br>Please close the file and try again."; 
var sb = new StringBuilder(); 
sb.Append("<script type=\"text/javascript\">"); 
sb.Append("window.onload=function() {"); 
var serializer = new JavaScriptSerializer(); 
sb.AppendFormat("alert({0});", serializer.Serialize(message)); 
sb.Append("};"); 
sb.Append("</script>"); 
ClientScript.RegisterClientScriptBlock(
    this.GetType(), 
    "alert", 
    sb.ToString(), 
    false 
); 

Еще одно замечание, что если вы делаете это в AJAX позвоню следует использовать метод ClientScript.RegisterStartupScript.

+0

Хотя ваш совет является перфекционом, действительным для общего сценария, сообщение в этом случае кодируется и не имеет '' '. –

+0

Я просто указываю на все ошибки и недостатки, которые я вижу с помощью этого кода. Тот факт, что сообщение жестко запрограммировано абсолютно, не освобождает вас от обязанности жестко кодировать его. Потому что следующий разработчик, который приходит и просто меняет это сообщение, будет очень неприятным сюрпризом :-) Я также указываю на эти недостатки, потому что SO - это хорошо зарекомендовавший себя сайт, на котором многие разработчики приходят искать знания. Когда делаю обзоры кода, я вижу, что так много людей совершают те ошибки, которые возникают из-за очень сложного поиска ошибок. –

+0

сделанный пункт, просто хотел заметить, что отсутствие кодировки не вызывает этой проблемы. Ваш ответ очень полный и оцененный. –

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