Веб-страница Sharepoint, отправляющая данные на страницу приложения через PostBackUrl

StackOverflow https://stackoverflow.com/questions/7313237

Вопрос

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

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

Мы очень ценим любую помощь.

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top