2017-06-05 32 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 + ")"); 

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