Значение HiddenField потеряно при обратной передаче
У меня есть некоторый JavaScript, который устанавливает значение HiddenField
и затем заставляет обратную передачу. Я могу проследить через этот JavaScript, и он, кажется, работает правильно. Тем не менее, когда я проверяю значение HiddenField
из события загрузки страницы оно больше не устанавливается.
Ища в Интернете, я вижу много сообщений о потере HiddenField
ценности, но ни один из них, казалось, не делал то же самое, что и я.
Вот моя функция JavaScript (модифицированная):
function EditItemItem(itemId) {
document.getElementById('<%= EditItemId.ClientID %>').value = itemId;
__doPostBack('<%= EditItemUpdatePanel.ClientID %>', '');
}
А вот часть моей разметки (модифицированная):
<div id="EditItemBox" runat="server">
<asp:HiddenField runat="server" id="EditItemId" />
<asp:UpdatePanel ID="EditItemUpdatePanel" runat="server"
UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="EditItemPanel" runat="server"
CssClass="ModalDialog" style="display:none;">
<div>Edit an Item</div>
<!-- ... -->
</asp:Panel>
</asp:UpdatePanel>
</div>
У кого-нибудь есть какие-либо идеи?
2 ответа
Проще убрать runat=server
из скрытого поля, а затем получить доступ к нему из параметров формы Request.Form["EditItemId"]
, Тогда это работает каждый раз.
Ваш код станет:
function EditItemItem(itemId) {
document.getElementById('EditItemId').value = itemId;
__doPostBack('<%= EditItemUpdatePanel.ClientID %>', '');
}
<div id="EditItemBox" runat="server">
<input type="hidden" id="EditItemId" name="EditItemId" value="" />
<asp:UpdatePanel ID="EditItemUpdatePanel" runat="server"
UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="EditItemPanel" runat="server"
CssClass="ModalDialog" style="display:none;">
<div>Edit an Item</div>
<!-- ... -->
</asp:Panel>
</asp:UpdatePanel>
</div>
Если вы ожидаете значение после AJAX-поста через UpdatePanel
тогда вам нужно положить его внутрь ContentTemplate
...