【问题标题】:Hidden Field losing its Value on postback隐藏字段在回发时失去其价值
【发布时间】:2010-06-07 19:57:26
【问题描述】:

我有一个 ascx 页面,我在其中使用隐藏字段来存储下拉框的值,因为它是使用 google 地址查找器生成的。我的问题是,当我尝试将值直接存储在隐藏字段中时:

hfDdlVerifyID.Value = ddlVerifySS.SelectedValue;

在单击按钮的情况下,值会被存储,但在回发时会再次丢失。然而,如果我尝试使用 Scriptmanager 来执行此操作,则不会存储任何内容。

getBuild.AppendLine("$get('" + hfDdlVerifyID.ClientID + "').value = $get('" + ddlVerifySS.ClientID + ").value;");

ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "storeHidden", getBuild.ToString(), true);
//  Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "storeHidden", getBuild.ToString(), true);
string test = hfDdlVerifyID.Value.ToString();

ascx 页面是:

<asp:UpdatePanel ID = ddlUpdate runat="server">
    <ContentTemplate>
         <asp:Panel ID="pVerify" runat="server">
             <br />
             <fieldset>
                 <legend>
                     <asp:Literal ID="lVerify" runat="server" />
                 </legend>
                 <asp:CheckBox
                     ID      ="cbVerify"
                     runat   ="server"
                     Text    ="Use the value from the following list, (Uncheck to accept address as it is)."
                     Checked ="true" />
                 <br />
                 <asp:DropDownList ID="ddlVerifySS" runat="server"
                     onselectedindexchanged="ddlVerifySS_SelectIndexChange" />
                 <asp:HiddenField id="hfDdlVerifyID"
                     runat   ="server" /> 
             </fieldset>
         </asp:Panel>  
     </ContentTemplate>
 </asp:UpdatePanel>

 <padrap:Button          ID          ="bVerify"
                         runat       ="server"
                         CssClass    ="btn"
                         OnClick     ="bVerify_Click"
                         Text        ="Verify Address" />

 <asp:Button             ID          ="btnSubSite" 
                         runat       ="server" 
                         text        ="Save"
                         CssCLass    ="btn" 
                         OnClick     ="save_btn_Click_subSite" 
                         onLoad="ddlVerify_Load" />

【问题讨论】:

    标签: jquery asp.net ajax hiddenfield


    【解决方案1】:

    调用 ajax 调用的 asp 按钮应该在 ajax 面板中。将按钮放在更新面板中,然后重试。希望你能得到隐藏字段的值。

    【讨论】:

      【解决方案2】:

      您应该考虑使用 Viewstate。 希望这会有所帮助

      http://msdn.microsoft.com/en-us/library/bb386448.aspx#Y2000

      【讨论】:

      • 请详细说明如何实现视图状态。链接可能会失效。
      【解决方案3】:

      通常,当我遇到这样的问题时(回发后我丢失了数据),我最终发现我忘记将重置数据的函数放在 if(!IsPostback) 内的字段中

      【讨论】:

        【解决方案4】:

        如果您删除 UpdatePanel,您的此代码是否有效?

        此外,您为 getBuild 调用发布的代码在对项目 ddlVerifySS.ClientID 的 $get 调用中缺少右单引号。这是在这里输入的拼写错误,还是您的代码有问题?如果是后者,这将解释为什么您在使用脚本管理器时看不到复制的值。

        【讨论】:

          【解决方案5】:

          在过去,我有一些非常复杂的网页大量使用了 Ajax。我喜欢 HiddenFields,因为它易于使用和智能感知。在最近的一个案例中,我发现和你一样,我的 HiddenField 在回发时失去了它的价值。所以我作弊了一点…… 我使用 HiddenFields Init 事件和 Unload 事件在 Session 中初始化并捕获它的值。更好的解决方案是修复它丢失状态的原因或切换到 Session。我正在使用该值在一堆不同的区域中操作 Multiview ActiveViewState 属性,并且不想重新布线或进行深入的调试跟踪。时间是个问题。

          Protected Sub HiddenFieldActiveView_Init(sender As Object, e As System.EventArgs) Handles HiddenFieldActiveView.Init
            If Not Page.IsPostBack Then
              HiddenFieldActiveView.Value = "0"
            Else
              HiddenFieldActiveView.Value = CStr(Session("ActiveViewIndex"))
            End If
          End Sub
          
          Protected Sub HiddenFieldActiveView_Unload(sender As Object, e As System.EventArgs) Handles HiddenFieldActiveView.Unload
              Session.Add("ActiveViewIndex", HiddenFieldActiveView.Value)
          End Sub
          

          所以页面第一次加载时,HiddenField 被初始化为 0,然后在随后的初始化中,它从 Session 加载值。

          这可能不是最漂亮或最聪明的解决方案。但它适用于我的情况。

          ~伊恩

          【讨论】:

            【解决方案6】:

            几周前我遇到了同样的问题。我使用文本框和 CSS 解决了它。尝试使用 asp:TextBox 和 CSS 属性 display: none;

            这只是我的建议,它帮助了我。

            希望对你有帮助!

            【讨论】:

              猜你喜欢
              • 2018-05-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-12-02
              • 2011-08-17
              • 1970-01-01
              相关资源
              最近更新 更多