У меня есть GridView
которого есть FooterRow, где я использую метки для отображения итогов каждого столбца.
Я обращаюсь к GridView
в JQuery, и итоги вычисляются с использованием JQuery и отображаются в FooterRow
каждого столбца GridView.
<asp:TemplateField HeaderText="Age">
<ItemTemplate>
<asp:Label ID="lblAge" Text='<%# Eval("Age") %>' runat="server"></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:Label ID="lbltotalAge" runat="server"></asp:Label>
</FooterTemplate>
</asp:TemplateField>
Но когда я нажимаю кнопку "Отправить" и пытаюсь получить доступ к этим значениям в коде за внутренним нажатием кнопки "Пуск", все значения "Всего" не отображаются и остаются в качестве значения по умолчанию "Нуль".
string totalAge = ((Label)GrdV.FooterRow.FindControl("lbltotalAge")).Text; // always 0
Чтобы преодолеть это, я использовал элементы HiddenField
вне GridView, как это было предложено в предыдущем POST.
После вычисления общих значений в функции JQuery я HiddenFields
эти значения в соответствующие HiddenFields
и успешно получая значения в codebehind.
Мой вопрос, почему это так? Что особенного в скрытых областях?
Не потому, что это скрытые поля, а потому, что они отображаются как элементы управления html, которые возвращают свое значение, и поэтому вы можете получить его снова после сообщения назад.
Другие элементы управления, которые не отображаются в качестве элементов управления вводом, не могут возвращать их значение, а asp.net сохраняет предыдущее значение на странице просмотра страницы, что снова является скрытым элементом управления вводом, который хранит эти данные и возвращает их обратно. Итак, после сообщения назад, в коде asp.net декодируйте состояние представления и дайте значения этим элементам управления.
Например, TextBox
визуализируется как управление вводом, Literal
- нет.
<asp:Label>
- это просто текст, а не элемент управления. Вы можете узнать, проверив выведенный исходный HTML-код.