2017-11-13 1 views
0

Ich versuche, eine Reihe von UpdatePanels mit einer CheckBox und <a> Link in jedem hinzuzufügen. Wenn ich auf den Link klicke, will ich auch den Codaneben überprüfen. Ich kann den HTML-Code richtig angezeigt bekommen, habe aber Probleme damit, die UpdatePanel & Steuerelemente mit dem Backend zu kommunizieren.ASP.NET Fügen Sie Dynamic HTML mit UpdatePanel & Web Controls zu aspx Seite hinzu. Web Control Update andere Kontrolle OnClick

Ich habe eine Haupt-Master-Seite, eine zweite Master-Seite innerhalb der Haupt-Seite, dann meine Inhaltsseite, mit der ich in der Kind-Master-Seite arbeite. Ich habe einen ScriptManager auf meiner Hauptmasterseite mit EnablePartialRendering="True".

ich diesen Fehler: asp.net CS1061 was im Grunde bedeutet meine Control nicht meine Funktion im Code zu finden, hinter

Die Menge dieser Abschnitte bin ich die Schaffung der Update enthalten ist dynamisch und abhängig von der Anzahl der Ergebnisse aus der Datenbank. Ich versuche, dies unter Verwendung ASP.NETs zu tun bietet ohne

auf Javascript zurückgreifen

aspx Seite:

<asp:Content ID="aBody" ContentPlaceHolderID="aContent" runat="server"> 
    <div id="caJumbotron" class="jumbotron aJumbotron" runat="server" > 
     <asp:Label ID="auditsTable" runat="server" Text="" /> 
    </div> 
</asp:Content> 

aspx.cs: HTML-Code in einer Schleife

HTML += "<div class='row caSectionRow'>" + 
      "<div class='col-md-6'>" + 
       "<asp:UpdatePanel runat='server'>" + 
        "<ContentTemplate>" + 
         "<input type='checkbox' class='caCheckbox' name='" + dt.Rows[i]["NAME"].ToString() + "' id='" + dt.Rows[i]["ID"].ToString() + "' value='" + dt.Rows[i]["ID"].ToString() + "' > " + 
         "<a href='' class='caLink' OnClick ='AuditLinkClick' runat='server' >" + dt.Rows[i]["NAME"].ToString() + "</a>" + 
        "</ContentTemplate>" + 
       "</asp:UpdatePanel>" + 
      "</div>"; //Insert column data 

Dann legen Sie die dynamische HTML innerhalb des Etiketts:

auditsTable.Text = HTML; 

Meine letzte Frage wäre ... Ich möchte den Link OnClick sogar machen t Um AuditLinkClick im Backend zu aktualisieren, müssen Sie CheckBox auf checked setzen. Das Kontrollkästchen hat jedoch eine dynamische ID und der Absender der Funktion ist der Link. Wie überprüfe ich die CheckBox im selben UpdatePanel wie der angeklickte Link?

private void AuditLinkClick(object sender, EventArgs e) 
    { 
     Response.Write("HERE<br/>"); 
     //Link is what sent us here 
     CheckBox btn = (CheckBox)sender; 
     string id = btn.ID; 
     btn.Checked = true; 
    } 

Danke für die Hilfe!

+0

Sie versuchen, dynamische Kontrollen durch die Schaffung einer Zeichenfolge zu einer Seite hinzuzufügen. Das wird nie funktionieren. Sie müssen REAL-Steuerelemente erstellen und sie zu einem Platzhalter hinzufügen. – VDWWD

+0

Ok.Ich denke, ich verstehe und werde daran arbeiten, ohne sie als String hinzuzufügen. Ich habe es einmal versucht, aber es war verwirrend, wie man ein UpdatePanel hinzufügt. Warum unterscheiden Sie nach dem Hinzufügen, wie das UpdatePanel endet? –

+0

Dann wieder, vielleicht sollte ich mit einem UpdatePanel ausruhen und die Steuerelemente dazu hinzufügen ... –

Antwort

0

@VDWWD war in den Kommentaren korrekt (Danke!). Ich konnte der Seite keine dynamischen Steuerelemente als Zeichenfolge hinzufügen. Das ist, was ich tat und wie ich brach es nach unten:

ein einzigen UpdatePanel mit einem Panel im vorderen Ende Setzen Sie alle dynamischen Daten zu halten, ich füge hinzu:

<asp:UpdatePanel ID="UpdatePanelCheckBoxes" runat="server"> 
    <ContentTemplate> 
     <asp:Panel ID="caPanel" runat="server"></asp:Panel> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Sie im Code-Behind I jede Steuer hinzugefügt und den Rahmen <div> s um sie herum durch:

caPanel.Controls.Add(new LiteralControl("<div class='col-md-6'>")); 

CheckBox aCheckBox = new CheckBox(); 
aCheckBox.ID = dt.Rows[i]["ID"].ToString(); 
caPanel.Controls.Add(aCheckBox); 

Button checkboxButton = new Button(); 
checkboxButton.ID = "Button"+dt.Rows[i]["ID"].ToString(); 
checkboxButton.Text = dt.Rows[i]["NAME"].ToString(); 
checkboxButton.CssClass = "caButton"; 
checkboxButton.Click += new EventHandler(ALinkClick); 
caPanel.Controls.Add(checkboxButton); 

caPanel.Controls.Add(new LiteralControl("</div>")); 

eine Sache, die mich zurück von der Entdeckung dieses früher hielt, war die Tatsache, dass ich Master Pages und benötigt ist mit einem Panel verwenden, um die C hinzufügen steuert zu. Ich bekam den Fehler [HttpException (0x80004005): Steuerung 'ctl00_TextBox1' des Typs 'TextBox' muss innerhalb eines Formular-Tags mit runat = Server.] bis ich die verwendet.

Diese Antwort geholfen: Control 'ctl00_TextBox1' of type 'TextBox' must be placed inside a form tag with runat=server

Verwandte Themen