2016-05-23 4 views
0

Ich habe diese AJAX-Taste, die ich einige CSS aktualisieren möchte. Das Problem besteht darin, dass die Steuerelemente, die ich aktualisieren möchte, sich in einer anderen Datei befinden und nicht aus dieser Datei entfernt werden können.CSS von Controls in verschiedenen Dateien über CodeBehind aktualisieren

Dies ist das Panel, dessen CSS ich aktualisieren möchten, die in der Site.Master Datei befindet:

<asp:ScriptManager ID="ScriptManager" runat="server" /> 
<asp:UpdatePanel ID="Panel2" runat="server" updatemode="Always"> 
     <ContentTemplate> 
      <div id="updateThis" runat="server"><p>Test text</p></div> 
     </ContentTemplate> 
</asp:UpdatePanel> 

Dies ist die Schaltfläche in der Datei Items.ascx befindet:

<asp:UpdateProgress runat="server" ID="PageUpdateProgress"> 
    <ProgressTemplate> 
     <img class="ajax-loader" src="/Images/ajax-loader.gif" alt="Loading..." /> 
     </ProgressTemplate> 
</asp:UpdateProgress> 
<asp:UpdatePanel ID="Panel3" runat="server" updatemode="Conditional"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger controlid="UpdateButton" eventname="Click" /> 
    </Triggers> 
    <ContentTemplate> 

      <asp:Button runat="server" OnClick="UpdateButton" 
      OnClientClick="hideButton()" Text="Update" 
      class="update" ID="UpdateButton" name="UpdateButton" 
      type="submit" ></asp:Button> 

    </ContentTemplate> 
</asp:UpdatePanel> 

Dies ist die Methode, die Items.ascx.cs Updatebutton

protected void UpdateButton(object sender, EventArgs e) 
{ 
    var masterPage = this.Page.Master; 
    var updatePanel = masterPage.FindControl("Panel2"); 

    var div = (HtmlGenericControl)updatePanel.Controls[0].FindControl("updateThis"); 
    div.Style.Add("color", "#ff0000"); 
} 

Wenn ich auf die Schaltfläche es nicht tut, ist am Ende funktioniert richtig. Von jetzt an, mit der AJAX UpdateProgress Vorlage, zeigt es das Laden von GIF und dann das GIF verschwindet und der Text ändert sich nie die Farbe.

EDIT

Hoffentlich wird dies eine bessere Vorstellung davon, wo die Dinge könnte schief gehen:

Das funktioniert

protected void UpdateButton(object sender, EventArgs e) 
{ 
    var masterPage = this.Page.Master; 
    var updatePanel = masterPage.FindControl("Panel2"); 

    var div = (HtmlGenericControl)updatePanel.FindControl("updateThis"); 
    div.Style.Add("color", "#ff0000"); 

    UpdateButton.Text = "Done!"; 
} 

ich in der Findcontrol() -Methode hatte #updateThis. Sei nicht wie ich!

Antwort

0

Sie sollten das runat="server" Attribut in den div Kontrolle, fügen Sie es in Code-behind sichtbar zu machen:

<div id="updateThis" runat="server"><p>Test text</p></div> 

Sie können auch Controls[0] im Ereignishandler entfernen (aber es funktioniert, wenn Sie es halten, nach zu meinen Tests):

protected void UpdateButton(object sender, EventArgs e) 
{ 
    var masterPage = this.Page.Master; 
    var updatePanel = masterPage.FindControl("Panel2"); 

    var div = (HtmlGenericControl)updatePanel.FindControl("updateThis"); 
    div.Style.Add("color", "#ff0000"); 
} 
+0

Hmmm das scheint nicht für mich zu arbeiten. Sie sagten, dass das Entfernen der Steuerelemente [0] aus dem Ereignishandler in Ihrem Test funktioniert hat? Ich frage mich, warum mir vielleicht etwas zustößt? – FranticJ3

+0

Nur neugierig: stürzt Ihr Originalcode ab? Es sollte, da 'updateThis' nicht ohne das Attribut 'runat =" server "' gefunden werden kann. Wie für 'Controls [0]', funktioniert es, wenn Sie es behalten? Es funktioniert für mich damit oder ohne es. – ConnorsFan

+0

Meine Seite stürzt beim Klicken auf die Schaltfläche nicht ab. Das AJAX Loader GIF erscheint für einen kurzen Moment und verschwindet dann, als würde es funktionieren, aber Style.Add(); Linie scheint nicht wirklich zu funktionieren. Ich habe das Style.Add() auskommentiert; Zeile und hinzugefügt in UpdateButton.Text = "Fertig!"; und es ändert den Text der Schaltfläche, sobald das AJAX Loader GIF verschwindet. Ich werde den ursprünglichen Beitrag mit weiteren Informationen aktualisieren. – FranticJ3

Verwandte Themen