2017-06-05 15 views
0

Guten Tag!C# - Rufen Sie die gleiche JavaScript-Funktion in einer Schleife

Ich versuche zu erreichen, die Farbe in der Kalenderzelle von EXT-Kalender für jeden Feiertag (Urlaubsdaten sind aus der Datenbank) zu ändern. Aber es ändert nur den ersten Feiertag, der die erste Zeile in der Datenbank ist.

Mein Client-Seite Code:

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

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

Mein Server-Side-Code:

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); 

      } 

Schätzen Sie alle Empfehlungen/Vorschläge/Lösungen. Vielen Dank!

Antwort

1

Mein Vorschlag durch die Zellen und Registerclient wäre statt looping Funktion in Server-Seite können Sie alle Zellen in einem 'String-Array' und übergeben Sie das an die Client-Seite Funktion als Parameter über RegisterClientScriptBlock-Funktion.

Der Parameter Ihrer clientseitigen Funktion sollte vom Typ String-Array sein und Sie können das Array auf der Client-Seite durchlaufen, wodurch Sie das Ergebnis erhalten.

+0

Danke für den Vorschlag Sir! @ Coder1991 Gibt ein Feedback, nachdem ich versucht habe – interkey

+0

@Gen Sure. Ich hoffe du hast meine Antwort verstanden. – Coder1991

2

Der Grund ist, dass Sie nur Page.ClientScript.RegisterClientScriptBlockeinmal pro Postback anrufen können.

Mein Vorschlag: eine Zeichenfolge erstellen, die alle Skripte halten Sie, laufen möchte und diese Zeichenfolge in Page.ClientScript.RegisterClientScriptBlock verwenden:

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

Hallo Sir @Koby Douek zunächst einmal vielen Dank für Ihre Antwort. Jetzt verstehe ich, dass ich nur ein clientscript aufrufen kann. Ihr Vorschlag scheint jedoch nicht zu funktionieren. Egal, danke, dass du mir geholfen hast zu verstehen! :) – interkey

0

Verwenden

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

(aber das Array String Ansatz von den anderen funktioniert auch vorgesehen anhängt)

Verwandte Themen