Значение 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...

Другие вопросы по тегам