【问题标题】:HiddenField Value Lost on Postback回发时丢失的 HiddenField 值
【发布时间】:2011-09-15 00:04:58
【问题描述】:

我有一些 JavaScript 设置 HiddenField 的值,然后强制回发。我可以通过这个 JavaScript 进行跟踪,它似乎工作正常。但是,当我从页面的 Load 事件中测试 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>

有人有什么想法吗?

【问题讨论】:

  • 乔纳森。最后你搞定了吗?
  • @marto:不完全是。它似乎与动态加载的用户控件有关。我实际上能够更好地定义问题,甚至在一个小型测试项目中重现问题。我发布了一个新问题here

标签: javascript asp.net ajax hiddenfield


【解决方案1】:

如果您从隐藏字段中删除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>

【讨论】:

  • 好吧,除了当 HiddenField 控件没有 runat="server" 属性时我得到的警告之外,即使这对我也不起作用。在这一点上,我无法判断问题是否与 AJAX 或什么有关。 Request.Form['EditItemId] 总是返回 null。
  • 很抱歉。您不应该使用 。我现在会更新答案。
  • @marto:我必须有其他事情发生,因为它仍然为空。我假设这是一个 AJAX 回发,当它导致页面的 Load 事件运行时。不知何故,数据没有返回到服务器。
  • 很奇怪!你有没有在 fiddler 中查看隐藏字段的值是否甚至被发送回服务器?
  • 我没用过 Fiddler 但我可以看到 Request.Form.AllKeys 集合不包含隐藏字段。我什至在标记中设置了一个默认值,但它仍然没有显示。必须与作为 AJAX 回调有关吗?
【解决方案2】:

如果您希望通过 UpdatePanel 回传 AJAX 的值,那么您需要将其放入 ContentTemplate...

【讨论】:

  • 我假设 Page_Load 被调用以响应 AJAX 回发。我尝试直接在 ContentTemplate 中移动 HiddenField 控件,甚至在 EditItemPanel 中再次尝试,但我得到了相同的结果。
猜你喜欢
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2013-10-26
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多