2017-06-05 59 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循環功能在服務器端,您可以獲取一個'字符串數組'中的所有單元格,並通過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首先感謝您的答覆。現在我明白我只能打一個客戶端了。但是,您的建議似乎不起作用。無論如何,謝謝你幫助我理解! :) – interkey

0

使用

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

(但字符串數組追加由他人提供的方法也工作)