2015-03-07 3 views
0

У меня есть проблема с функцией javascript вызова (в .aspx-файле) из C# (в файле .aspx.cs) в цикле. Код ниже не работает. Ничего не произошло. Что не так? Я прочитал несколько сообщений о переполнении стека, но ничего не работает.RegisterStartupScript в цикле

Вот код:

int i = 1; 
while (i<10) 
{ 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "key" + i.ToString(), "myFunction('" + i + "')", true); 
    i++; 
} 

функция JavaScript

function myFunction(i){ 
    document.write(i); 
} 

Но этот код работать, но это меня не интересует.

string something = "something"; 
Page.ClientScript.RegisterStartupScript(this.GetType(), "key", "myFunction('" + something + "')", true); 
+0

Целые автоматически анализироваться в строковое значение, когда это необходимо в JavaScript, C# и VB.NET; 'i.ToString()' не нужно. Кроме этого вам нужно добавить ';' в конец вашей функции, иначе вы получите что-то вроде этого, представленного на вашей странице: 'myFunction ('1') myFunction ('2') myFunction ('3') myFunction ('4') ' – Lopsided

+0

Ваш код действительно работает в моей среде. Хотя я преобразовал его в VB.NET. – Lopsided

+0

, конечно, я забыл ';' в конце моей функции. спасибо за ответы Стив Падмор и Lopsided –

ответ

1

Вместо вашего цикла, попробуйте следующее:

 ClientScriptManager cs = Page.ClientScript; 
     string csName = "MyScript"; 
     Type csType = this.GetType(); 

     for(int i = 1; i <= 10; i++) 
     { 
      string currentName = string.Format("{0}{1}", csName, i); 
      if (!cs.IsStartupScriptRegistered(csType, currentName)) 
      { 
       string csText = string.Format("myFunction('{0}');", i); 
       cs.RegisterStartupScript(csType, currentName, csText, true); 
      } 
     } 
+0

Я также рекомендую вам использовать функцию String.Format. Пример: 'String.Format (" myFunction ('{0}'); ", i)' – Lopsided

+0

Полностью согласен, Lopsided ... –

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