Question

J'ai un Webpart qui contient deux listes déroulantes sur un panneau de mise à jour. Il y a un bouton d'envoi qui a l'ensemble de PostBackUrl à une application Page sharepoint

<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" />

Cela fonctionne en redirigeant le navigateur à la page d'application j'ai créé, mais je ne parviens pas à accéder aux données de formulaire.

Sur la fonction Page_Load de l'application Page je le débogage du code ci-dessous.

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 />";
    }

}

Cela montre que les données que je besoin a en effet été affichés sur la page.

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

Mais lorsque je tente d'accéder à ce que:

Page.Request.Form["ClassSelector"]

Rien n'est renvoyé. Je sais que je dois manquer quelque chose simple, mais je ne suis pas sûr.

Toute aide est grandement appréciée.

Était-ce utile?

La solution

Ah, le problème préfixe page maître ASP.NET! L'un de mes favoris.

La page principale de votre page l'application met un préfixe devant vos commandes côté serveur afin qu'ils seront uniques. Si vous finissez par accéder à votre contrôle via la collection Form, vous devez y accéder en utilisant non seulement l'ID de contrôle, mais aussi le préfixe ContentPlaceHolder. Voilà pourquoi vous voyez un si grand ID de votre déchetterie logique de débogage.

Si vous souhaitez obtenir à l'ID programme du contrôle, vous pouvez utiliser FindControl, mais vous devrez cibler le champ d'espace réservé de contenu apppropriate pour cela. Voici un bon tutoriel / explication ici (qui met l'accent sur la façon dont cela peut vraiment devenir complexe!).

Bien sûr, l'autre option que vous pouvez utiliser est tout simplement coder en dur l'ID de contrôle basé sur ce que vous voyez de votre code de débogage ... mais ce ne sera pas fiable si vous changez de contenu ou plus placeholders votre contrôle dans un récipient différent.

Je suppose que la réponse dépend de la façon statique vos commandes seront.

Hope this helps. Bonne chance !!

Autres conseils

Et bien pour y accéder de cette façon vous devez utiliser

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

Comme vous pouvez le voir en fait à partir de votre code où vous définissez le texte de l'étiquette à s, plus Request.Form[s]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top