Sharepoint Webpart размещает данные на странице приложения через PostBackUrl - PullRequest
1 голос
/ 06 сентября 2011

У меня есть веб-часть, которая содержит несколько выпадающих списков на панели обновлений. Есть кнопка отправки, для которой PostBackUrl установлен на страницу приложения 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" />

Это работает при перенаправлении браузера на страницу приложения, которую я создал, но у меня возникают проблемы с доступом к данным формы.

В функции Page_Load на странице приложения у меня есть следующий код отладки.

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

}

Это показывает, что данные, которые мне нужны, фактически были размещены на странице.

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

Но когда я пытаюсь получить доступ к этому как:

Page.Request.Form["ClassSelector"]

Ничего не возвращается. Я знаю, что, должно быть, здесь упускаю что-то простое, но я не уверен, что.

Любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

Ах, проблема с префиксом главной страницы ASP.NET! Один из моих любимых.

Главная страница страницы вашего приложения ставит префикс перед элементами управления на стороне сервера, чтобы они были уникальными. Если вы в конечном итоге получите доступ к своему элементу управления через коллекцию Form, вы должны получить к нему доступ, используя не только идентификатор элемента управления, но и префикс ContentPlaceholder. Вот почему вы видите такой большой идентификатор, выгруженный из вашей логики отладки.

Если вы хотите программно добраться до идентификатора элемента управления, вы можете использовать FindControl, но для этого вам нужно будет выбрать соответствующую область заполнителя содержимого. Вот хорошее руководство / объяснение здесь (которое действительно подчеркивает, насколько сложным это может быть!).

Конечно, другой вариант, который вы можете использовать, это просто жесткое кодирование идентификатора элемента управления в зависимости от того, что вы видите в коде отладки ... но это не будет надежным, если вы измените заполнители содержимого или более свой контроль в другой контейнер.

Полагаю, ответ зависит от того, насколько статичными будут ваши элементы управления.

Надеюсь, это поможет. Удачи !!

0 голосов
/ 06 сентября 2011

Ну, чтобы получить к нему доступ, вы должны использовать

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

Как вы на самом деле можете видеть из своего кода, где вы устанавливаете текст метки на s плюс Request.Form[s]

...