Frage

Ich habe ein Webpart, das ein paar Dropdowns in einem Update -Panel enthält. Es gibt eine Einsende -Schaltfläche, bei der das Postbackurl auf eine SharePoint -Anwendungsseite eingestellt ist

<asp:DropDownList ID="ClassSelector" runat="server" Enabled="False" 
    AutoPostBack="True" onselectedindexchanged="ClassSelector_SelectedIndexChanged">
    <asp:ListItem Selected="True" Value="-null-">Select Class...</asp:ListItem>
    <asp:ListItem Value="1">Class 1</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="btnSubmit" runat="server" Text="Show Page" Enabled="False" 
                PostBackUrl="~/_layouts/MyWebParts/MyAppPage.aspx" />

Dies funktioniert bei der Umleitung des Browsers auf die von mir erstellte Anwendungsseite, aber ich habe Probleme beim Zugriff auf die Formulardaten.

Auf der Funktion Page_load der Anwendungsseite habe ich den folgenden Debugging -Code.

protected void Page_Load(object sender, EventArgs e)
{
    Label1.Text = "";

    foreach (String s in Page.Request.Form.AllKeys)
    {
        Label1.Text += s + ": " + Page.Request.Form[s] + "<br />";
    }

}

Dies zeigt, dass die Daten, die ich benötige, tatsächlich auf der Seite veröffentlicht wurden.

ctl00$m$g_24a73cf8_8190_4ddb_b38b_bf523b12dbd3$ctl00$SemesterSelector: 28
ctl00$m$g_24a73cf8_8190_4ddb_b38b_bf523b12dbd3$ctl00$ClassSelector: 11-0021-A

Aber wenn ich versuche, darauf zuzugreifen wie:

Page.Request.Form["ClassSelector"]

Nichts wird zurückgegeben. Ich weiß, dass ich hier etwas Einfaches fehlen muss, aber ich bin mir nicht sicher, was.

Jede Hilfe wird sehr geschätzt.

War es hilfreich?

Lösung

Ah, das Prefix -Problem der ASP.NET -Masterseite! Eines meiner liebsten.

Auf der Masterseite für Ihre Anwendungsseite steht ein Präfix vor Ihren serverseitigen Steuerelementen, damit sie eindeutig sind. Wenn Sie am Ende über die Steuerung auf Ihre Kontrolle zugreifen Form Durch die Sammlung müssen Sie nicht nur mit der Kontroll -ID, sondern auch mit dem Präfix von ContentPlacePlader darauf darauf zugreifen. Deshalb sehen Sie eine so große ID aus Ihrer Debugging -Logik.

Wenn Sie programmgesteuert zur ID der Steuerung gelangen möchten, können Sie verwenden FindControl, Aber Sie müssen darauf auf den APPPRITENT -Inhalts -Platzhalterbereich abzielen. Hier ist ein gutes Tutorial/eine gute Erklärung hier (Was wirklich betont, wie komplex das werden kann!).

Natürlich ist die andere Option, die Sie verwenden können, die Kontroll-ID nur hart, basierend auf dem, was Sie aus Ihrem Debugging-Code sehen ... aber das wird nicht zuverlässig, wenn Sie Inhaltsplatzhalter oder mehr Ihre Kontrolle auf ein anderes ändern Container.

Ich denke, die Antwort hängt davon ab, wie statisch Ihre Steuerelemente sein werden.

Hoffe das hilft. Viel Glück!!

Andere Tipps

Nun, um darauf zuzugreifen, müssten Sie verwenden

Page.Request.Form["ctl00$m$g_24a73cf8_8190_4ddb_b38b_bf523b12dbd3$ctl00$ClassSelector"]

Wie Sie tatsächlich aus Ihrem Code sehen können, wo Sie den Etikettentext auf S plus festlegen Request.Form[s]

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top