我有一个ascx页面,我使用隐藏字段来存储下拉框的值,因为它是使用谷歌地址查找器生成的。我的问题是,当我尝试将值直接存储在隐藏字段中时:
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" />
答案 0 :(得分:2)
调用ajax调用的asp按钮应该在ajax面板中。将按钮放在更新面板中,然后重试。我希望你能得到隐藏领域的价值。
答案 1 :(得分:1)
您应该考虑使用Viewstate。 希望这有帮助
答案 2 :(得分:1)
Usualy,当我遇到这样的问题时(在回复后我丢失了数据)我发现我忘了将函数放在我重置if(!IsPostback)
答案 3 :(得分:0)
如果删除UpdatePanel,您的此代码是否有效?
此外,您为getBuild调用发布的代码在项目ddlVerifySS.ClientID的$ get调用中缺少结束单引号。这是输入此处的拼写错误,还是代码中的问题?如果是后者,这可以解释为什么在使用脚本管理器时没有看到复制的值。
答案 4 :(得分:0)
在过去,我有一些非常复杂的网页,大量使用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的值。
这可能不是最漂亮或最聪明的解决方案。但它适用于我的情况。
〜伊恩
答案 5 :(得分:0)
几周前我遇到了同样的问题。我用文本框和CSS解决了它。尝试使用asp:TextBox和CSS属性display:none;
这只是我的建议,它帮助了我。
希望它会对你有所帮助!