2016-05-11 10 views
0

Ich habe diesen Repeater in einem anderen Repeater.Anfügen oder Hinzufügen einer Klasse zu einem Div in einem verschachtelten Repeater mit einer dynamisch zugewiesenen ID?

<asp:Repeater ID="rpDB_item" runat="server" OnItemDataBound="rpDB_item_ItemDataBound"> 
    <ItemTemplate> 
     <div class="row anj" id="ncollapse<%# ((((RepeaterItem)Container.Parent.Parent).ItemIndex)) %>" > 
     ... 
     </div>            
    </ItemTemplate> 
</asp:Repeater> 

Was würde ich tun möchte, ist mit id=ncollapse(x) mit .collapsed zur Klasse der Zeilen anhängen. Es gibt möglicherweise mehrere divs mit und id=ncollapse4, zum Beispiel. Wie würde ich die Klasse dieser Divs mit einer .collapsed Klasse von Code-behind (C#) anhängen? Oder wäre das besser die Klasse inline auf der aspx-Seite setzen? Ich würde es vorziehen, einen Schalter als die definierende Aussage zu verwenden, da es einige Optionen gibt, die die sStatus sein könnte.

ich versucht habe
HtmlGenericControl nc = (HtmlGenericControl)(e.Item.FindControl("ncollapse"+((((RepeaterItem)e.Item.Parent.Parent).ItemIndex).ToString())));

dann die hinter nc.Attributes["class"] = "collapsed" in Code-Einstellung aber einen NULL-Verweis auf nc bekommen (es erscheint immer null zu sein); sowie

<div class="row anj <%# switch (DataBinder.Eval(Container.DataItem,"sStatus").ToString()) 
{ case "OFFLINE": case "RECOVERY_PENDING": case "UNKNOWN": 
     Response.Write("collapsed"); 
     break; 
    default: 
     Response.Write(""); 
     break; 
};%> id="<%# (DataBinder.Eval(Container.DataItem,"sStatus").ToString() == "OFFLINE" ? "n" : "ncollapse"+((((RepeaterItem)Container.Parent.Parent).ItemIndex).ToString())) %>"> 

Dies gibt mir einen Fehler mit switch. Ich bin mir nicht sicher, wohin ich gehe oder wohin ich mich als nächstes wenden soll. Gedanken?

Antwort

0

Es gibt wahrscheinlich einen Weg, um Ihre Aspx-Syntax richtig zu machen, aber ist es das wert? Es ist kaum lesbar. Ich würde vorschlagen, diese Logik zu Code hinter zu verschieben und dann aus Markup aufzurufen. Einfach zu schreiben, einfach zu lesen, einfach zu verwalten.

-Code hinter der Seite:

protected string getRowCollapsedClass(String sStatus) 
{ 
    switch (sStatus) 
    { 
     case "OFFLINE": 
     case "RECOVERY_PENDING": 
     case "UNKNOWN": 
      return "collapsed"; 
     default: 
      return String.Empty; 
    } 
} 

Und dann Markup wird wirklich einfach:

<div class='row anj <%# getRowCollapsedClass(Eval("sStatus").ToString()) %>' 

Ebenso für den ID-Wert. Denken Sie daran, den Index als zweiten Parameter zu übergeben.

+0

Das könnte meine beste Option sein. Ich schaue mir das an. Die Pause ist jedoch nicht notwendig, da die Rückgabeklausel die Pause ersetzt und die Pause unbenutzt oder benötigt wird. –

+0

@ user992069, Sie haben Recht, entfernt beide "break" s – Andrei

+0

Thnaks für mich an KISS erinnern - Keep It Simple Solution. Es funktioniert perfekt. Nun, um den Rest des Akkordeons zu bekommen und die Klasse zu wechseln –