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