Problem bei der Verwendung von UpdatePanel mit Masterpage in C #

Mein Code :

<%@ Page Language="C#" %>

<script runat="server">

    void button_Click(object sender, EventArgs e)
    {
        label.Text = "Refreshed by server side event handler at " + DateTime.Now + ".<br>Value provided:" + text.Text;
    }

</script>      
<html>
<head>
    <title>How to update an UpdatePanel with JavaScript</title>

    <script type="text/javascript">
        function UpdPanelUpdate(id) {
            var obj = document.getElementById("<%= text.ClientID %>");
            obj.value = id;
            __doPostBack("<%= button.ClientID %>", "");
        }
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <div>
        <a href="javascript:UpdPanelUpdate('Value passed by javascript')">Update the Panel</a>
        <asp:TextBox ID="text" runat="server" Style="display: none;"></asp:TextBox>
        <asp:Button ID="button" runat="server" OnClick="button_Click" Style="display: none;" />
        <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional" ChildrenAsTriggers="false">
            <contenttemplate>
               <asp:Label ID="label" runat="server"></asp:Label>
            </contenttemplate>
            <triggers>
               <asp:AsyncPostBackTrigger ControlID="button" EventName="Click" />
            </triggers>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>

Das funktioniert großartig, aber wenn ich es mit einer Masterpage verwende, scheint der Link zu funktionieren, #180;t scheint zu funktionieren... Kein Fehler, aber nichts passiert...

Jede Idee?

Danke!

Antwort auf "Problem bei der Verwendung von UpdatePanel mit Masterpage in C # " 2 von antworten

Haben Sie sichergestellt, dass der ScriptManager korrekt auf der Masterseite enthalten ist? Sie könnten diesen Link nützlich finden; Using the ASP.NET UpdatePanel Control with Master Pages

In Ihrem JavaScript versuchen Sie, UniqueID anstelle von ClientID:

function UpdPanelUpdate(id) {
            var obj = document.getElementById("<%= text.UniqueID%>");
            obj.value = id;
            __doPostBack("<%= button.UniqueID%>", "");
        }

Lassen Sie mich wissen, ob das funktioniert.

Ich vermute, was passiert, ist die Textbox-ID ist nicht mehr das, was Sie erwarten, es zu sein. Die ID ist ursprünglich "Text", sobald Sie diese Seite jedoch in eine Masterpage verschieben, ändern sich die Dinge. Da Steuerelemente nun in der Masterseite enthalten sind, ändern sich ihre IDs effektiv, um diese Beziehung anzuzeigen. Anstatt die ID des Textfeldes als "Text" zu verwenden, wird es nun so etwas wie ctl00 sein - wobei "ctl100" das ID-Präfix der Master-Seite ist und "cphBody" der Wert ist, den Sie der ContentPlaceHolderID dieser Seite zugewiesen haben.

Sicher, aus dem Code dahinter können Sie this.text.Text = "neuer Wert" tun und direkt darauf zugreifen. Das ist in Ordnung. Aber versuchen Sie, FindControl zu verwenden und Sie werden feststellen, dass die Dinge verwirrend werden. Der einfachste Weg, um wirklich zu verstehen, was ich beschreibe, ist, folgendes auf Ihrer Seite mit der Master-Seite zu tun:

  1. Legen Sie einen Haltepunkt auf Seite laden
  2. Bringen Sie Ihr direktes Fenster (STRG + ALT + I)
  3. Geben Sie diese ein in: ?this.text.ID (Sie sollten Text sehen)
  4. Geben Sie ein: ?this.text.ClientID (Sie sollten ctl00_cphBody_text)
  5. Eingeben in : ?this.text.UniqueID (Sie sollten ctl00 sehen)
  6. Testen Sie nun die Ergebnisse, die Sie für die Schritte 3-5 mit FindControl erhalten haben. Verwenden Sie ?this. FindControl("text") und ?this. FindControl("ctl00_cphBody_text") und ?this. FindControl("ctl00") - bis auf den letzten sollten null zurückgegeben werden.

Um dies weiter zu verstehen, schlage ich vor, this article, specifically the section titled "FindControl, JavaScript, and Naming Containers." zu lesen, insbesondere den Abschnitt "FindControl, JavaScript und Naming Containers".

EDIT: Ich kann die Funktion im Moment eigentlich nicht testen, aber ich frage mich, ob das, was ich über FindControl gepostet habe, für JavaScript gilt, das auf das Steuerelement zugreift. Basierend auf this article it seems ClientID is suggested over UniqueID. So this may not work. scheint es, dass ClientID über UniqueID vorgeschlagen wird. Das kann also nicht funktionieren.