Sathish km Ответов: 1

Clientscript вызывает только один раз в itemdatabound ретранслятора в asp.net. Как каждый раз вызывать функцию java-script?


protected void Page_Load(object sender, EventArgs e)
    {
          if (!IsPostBack) {
              string connectionstring = "Data source=xx; Initial Catalog=DB; Integrated Security=true";
              System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connectionstring);
              conn.Open();
              System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand("select top 50 MCUR_Currency_Code,  MCUR_Description, MCUR_Short_Description from sqlmas.gen_m_currencies", conn);
              System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(comm);
              System.Data.DataSet ds = new System.Data.DataSet();
              da.Fill(ds);
              Repeater1.DataSource = ds;
              Repeater1.DataBind();
          }
    }



protected void R1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
       {
          if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
              this.Page.ClientScript.RegisterStartupScript(this.GetType(), "Warning", "abc('test')", true);
          }
       }    



&ЛТ;язык скриптов="JavaScript-код" тип= "текст/JavaScript"&ГТ;
функция abc(t){
предупреждение (УФСКН')
}
< / script>

<asp:Repeater id="Repeater1" OnItemDataBound="R1_ItemDataBound" runat="server">
          <HeaderTemplate>
             <table border="1">
                <tr>
                   <td><b>Product</b></td>
                   <td><b>Consumer Rating</b></td>
                </tr>
          </HeaderTemplate>

          <ItemTemplate>
             <tr>
                <td> <asp:Label ID="Label1" Text='<%# DataBinder.Eval(Container.DataItem, "MCUR_Currency_Code") %>' Runat="server"/> </td>
                <td> <asp:Label id="RatingLabel" Text='<%# DataBinder.Eval(Container.DataItem, "MCUR_Description") %>' Runat="server"/> </td>
             </tr>
          </ItemTemplate>

          <FooterTemplate>
             </table>
          </FooterTemplate>

       </asp:Repeater>


Что я уже пробовал:

&ЛТ;АСП:репитер идентификатор="Repeater1" OnItemDataBound="R1_ItemDataBound" атрибут runat="сервер"и GT;

1 Ответов

Рейтинг:
12

F-ES Sitecore

Вы должны понимать, что вы не вызываете javascript из своего кода .net. Ваш код .net запускается и создает html для отправки в браузер, после того, как весь ваш код .net будет запущен, браузер получит результаты и выполнит их, и в этот момент вы можете запустить javascript. То, что делает RegisterStartupScript, - это добавление js к выходным данным в месте, которое означает, что он будет выполняться, когда страница наконец загрузится в браузере. Параметр «Предупреждение» является ключевым. Что вы делаете, так это помечаете свой «abc ('test')» как «Предупреждение», а ключи должны быть уникальными, поэтому, когда вы пытаетесь зарегистрировать этот js во второй или третий раз, .net видит, что вы уже добавили код с ключом «Предупреждение», чтобы он просто игнорировал ваш последующий запрос на добавление.

Поэтому вам нужно использовать уникальный ключ каждый раз, когда вы регистрируете скрипт. Простой способ сделать это-добавить индекс элемента к ключу;

this.Page.ClientScript.RegisterStartupScript(this.GetType(), string.Concat("Warning", e.Item.ItemIndex.ToString()), "abc('test')", true);


Это будет генерировать такие ключи, как" Warning0"," Warning1 " и т. д.


Sathish km

Спасибо. но это не дает никакого предупреждения
У меня есть 10 записей для загрузки в ретранслятор, так что он попадет в R1_ItemDataBound 10 раз, поэтому мне нужно вызвать функцию javascript в течение 10 раз.

F-ES Sitecore

Я не вижу, как это остановит все оповещения, все, что вы делаете, это меняете ключ.

Sathish km

Понял..

Страница.ClientScript.RegisterStartupScript (это.GetType (), string.Формат("CallMyFunction{0}", приращения), "таймер(" + у + ");", правда);

нужно передать uniqueid, чтобы позвонить более одного раза.