2017-06-05 18 views
0

おはよう!C# - ループ内で同じjavascript関数を呼び出す

EXTカレンダーのカレンダーセルの色を各休日ごとに変更しようとしています(休日の日付はデータベースからのものです)。しかし、データベースの最初の行である最初の休日だけが変更されます。

私のクライアント側のコード:

 var applyCss = function (param1) { 
     var css = "#CalendarPanel1-month-day-" + param1 + " {background-color: pink;}"; 

     Ext.net.ResourceMgr.registerCssClass("someCssClassId", css); 
    }; 

私のサーバー側のコード:

DataTable holiday = Attendance.getInstance().getHolidays(); 

      for (var i = 0; i < holiday.Rows.Count; i++) 
      { 
       var hd = holiday.Rows[i]["holiday_date"].ToString(); 
       Page.ClientScript.RegisterClientScriptBlock(GetType(), "myScript", "applyCss(" + hd + ")", true); 

      } 

は、任意の勧告/提案/ソリューションを感謝しています。ありがとう!

答えて

1

私の提案ではなく、細胞とあるRegisterClientScriptBlockをループするであろうサーバー側では、すべてのセルを1つの'文字列配列'に取得し、それをRegisterClientScriptBlock関数を介してパラメーターとしてクライアント側の関数に渡すことができます。

クライアント側関数のパラメータは文字列型でなければなりません。クライアント側で配列をループして結果を取得できます。

+0

提案ありがとうございました! @ Coder1991試してみた後、フィードバックを与えるでしょう – interkey

+0

@Gen Sure。あなたが私の答えを理解したことを願っています。 – Coder1991

2

理由は、Page.ClientScript.RegisterClientScriptBlockに一度だけ、ポストバックごとに呼び出すことができるからです。

私の提案:あなたが実行したいすべてのスクリプトを保持し、かつPage.ClientScript.RegisterClientScriptBlockにその文字列を使用する文字列を作成します。

DataTable holiday = Attendance.getInstance().getHolidays(); 
string script = string.Empty; 

for (var i = 0; i < holiday.Rows.Count; i++) 
{ 
    var hd = holiday.Rows[i]["holiday_date"].ToString(); 
    script += " applyCss(" + hd + "); "; 
} 
Page.ClientScript.RegisterClientScriptBlock(GetType(), "myScript", script, true); 
+0

こんにちは卿@Koby Douek最初にすべてのご回答をお願いいたします。今私は1つのクライアントスクリプトしか呼び出せないことを理解しています。しかし、あなたの提案はうまくいかないようです。それにもかかわらず、わたしの理解を助けてくれてありがとう! :) – interkey

0

使用

X.AddScript("applyCss(" + hd + ")"); 

(他の人が提供する配列の文字列を付加アプローチは、あまりにも動作します)

関連する問題