2013-04-24 4 views
0

Я хочу вызвать функцию javascript с страницы aspx в визуальных студиях 2012. функция принимает 7 значений из datbase, любое количество раз и вносит изменения в css на основе этих значений и DIV тег, который изменяет каждый экземпляр ретранслятораВызов функции js из репитера asp

<asp:Repeater ID="repModules" runat="server"> 
    <ItemTemplate> 
     <div id="<%#Eval("ModuleID")%>" onload="callFunction()"> 
      //different div tags, which have their 
      //styles edited by the js function 
     </div> 
     <script type="text/javascript"> 
      function callFunction() { 
       go("M1", "name", "20", "0", "80", "50", "70"); 
      } 
     </script> 
    </ItemTemplate> 
</asp:Repeater> 

конечной целью является, чтобы иметь переменные из спины, aspx.net.cs страницы, который называют в функции, но она даже не работает, как это. Я попытался назвать функцию несколькими различными способами и в нескольких местах, и вот уже некоторое время это застряло. , ИС скрипт выглядит так:

function go(Id, name, eworth, eattained, worth, attained, progress) { 
    //here the variables that are read in are 
    //assigned to variables defined in the js 
} 

Я не очень установлен в моих путях и любой другой способ, которым мы можем получить доступ к переменным ASPX в JavaScript будет хорошо. любой вход или обратная связь были бы весьма признательны. Спасибо вам большое за ваше время.

ответ

1

Вы объявляете ту же функцию, callFunction(), для каждой строки вашего ретранслятора. Вместо этого я объявляю его один раз в верхней части страницы. Затем, в вашем повторителе, сделайте вызов функции, передав данные со спины.

Для этого вы также можете использовать функцию ASP.Net, которая позволяет вам зарегистрировать код javascript для вызова при запуске. Вот пример (в VB.Net). Этот код будет использоваться в обработчике событий ItemDataBound для вашего ретранслятора. Обратите внимание, что я вызываю функцию «go()» вместо функции «callFunction()». Вам не понадобится эта дополнительная функция, так как вы можете напрямую вызвать «go()».

Dim csm As ClientScriptManager = Page.ClientScript 
Dim sb As New StringBuilder 
sb.AppendLine("go(""M1"", ""name"", ""20"", ""0"", ""80"", ""50"", ""70"");") 
csm.RegisterStartupScript(Page.GetType, "js_code_startup__unique_key", sb.ToString, True) 

Затем вы можете подставить жестко закодированные значения в приведенном выше коде вашими переменными. Обратите внимание, что я использую два двойных кавычки, чтобы избежать двойных кавычек, окружающих код в вызове sb.AppendLine.

Четвертый параметр в вызове RegisterStartupScript, установленный в True, автоматически включает теги для вас.

Когда страница загружается, этот код javascript будет загружен в нижней части страницы и выполнен в том виде, в котором он встречается. Если вы предпочитаете, вы можете попытаться вызвать его через какой-либо тип функции onload (возможно, назначая window.onload в вашем javascript или используя jQuery document.ready).

Если вы не хотели использовать обработчик событий ItemDataBound, вы могли бы просто вызвать функцию непосредственно в тегах скрипта (хотя это может быть проблемой, если не все элементы, которые ему нужны, загружаются в момент ее запуска). Чтобы получить значения из базы данных, вы, вероятно, будете связывать данные, поэтому вам нужно будет сделать что-то вроде того, что я сделал для вашего первого параметра в вызове функции.

<script type="text/javascript"> 
    go('<%# Eval("YourVarName") %>', "name", "20", "0", "80", "50", "70"); 
</script> 

UPDATE - Преобразованный код C#

Я не знаком с C#, но вот что я думаю, что это будет. Я положил его в обработчик события ItemDataBound. Я не тестировал это, поэтому я не уверен, что он на 100% точнее.

protected void repModules_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e){ 
    if (((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))) { 
     ClientScriptManager csm = Page.ClientScript; 
     StringBuilder sb = new StringBuilder(); 
     sb.AppendLine("go(\"M1\", \"name\", \"20\", \"0\", \"80\", \"50\", \"70\");"); 
     csm.RegisterStartupScript(Page.GetType, "js_code_startup__unique_key", sb.ToString, true); 
    } 
} 
+0

Большое спасибо. Есть ли шанс, что вы могли бы указать мне в правильном направлении сделать этот первый сегмент кода на C#, а не на VB? Еще раз спасибо за ваше время. – user2315258

+0

Я добавил обновление с тем, что, на мой взгляд, будет кодом C#. Если это не на 100% правильно, мы надеемся, что он по крайней мере поможет вам на правильном пути. – Rick

+0

Большое спасибо за ваше время, вы оказали реальную помощь. – user2315258

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