HiddenFieldValue属性返回为空时;回邮;使用AJAX UpdatePanel
本文关键字:回邮 使用 AJAX UpdatePanel 属性 返回 HiddenFieldValue | 更新日期: 2023-09-27 18:20:46
我已经处理这个问题好几个小时了,找不到解决方案。现在我在一个web应用程序中工作,我的第一个问题是我想动态地创建一个XML。。。然后我意识到,在回发之后,Xml正在重新发送。然后我想,"好吧,让我们创建一个HiddenField,并将节点作为字符串存储在HiddenField-value属性中,所以最后我只创建一个新的XmlElement,用HiddenField.value的InnerXml创建一个文档片段,并将该片段附加到XmlElement"。。。但是HiddenField.Value每次点击按钮都会重置。。。我刚刚用标签测试了这种方法,它很有效。。。
基本上,我有一个用AJAXControlToolKit选项卡容器控件一分为二的页面。第一个表单用于用户主数据,而第二个选项卡的表单旨在根据用户的需要多次填写表单,因为它用于存储家庭成员。所以这个过程是填充一个家族成员数据,点击按钮并将其存储在HiddenField.Value中,填充第二个家族成员的数据并再次点击以添加新的家族成员并连接到HiddenField.Value…但我意识到,在第一次点击Load Page方法后,HiddenField.Value再次为空。。。
也许没有那么重要,但在UpdatePanel上只有按钮和列表框,用于显示用户保存的所有家庭成员的一些数据,因此单击时唯一刷新的对象是列表框。
正如我刚才所说,如果使用HiddenField.Value,则使用Label.Text,Everything Works。。。
<%@ Page Language="c#" MasterPageFile="/Plantilla.master" AutoEventWireup="true" Inherits="alta_personal_interno" %>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>
<asp:Content runat="server" id="contentDefault" ContentPlaceHolderId="ContentPlaceHolderPagina">
<div align="left">
<table style="width: 100%; background-color: maroon">
<tbody>
<tr>
<td>
<span id="ctl00_ContentPlaceHolder1_lblTitulo" class="EtiquetaMedianoBlanco">
<asp:Label ID="lblTituloPExt" runat="server" Text="Alta de Personal Interno" />
</span>
</td>
</tr>
</tbody>
</table>
</div>
<cc1:TabContainer runat="server">
<cc1:TabPanel runat="server" HeaderText="Titular">
<ContentTemplate>
<--!Code with Form Elements-->
<asp:Button ID="btnAgregarNvo" runat="server" Text="Guardar" onclick="btnAgregarNvo_Click"/>
</ContentTemplate>
</cc1:TabPanel>
<cc1:TabPanel runat="server" HeaderText="Familia">
<ContentTemplate>
<asp:HiddenField runat="server" id="hidFamiliares"></asp:HiddenField>
<!--Code with Form Elements-->
<asp:UpdatePanel runat="server" id="upFamiliares">
<ContentTemplate>
<asp:Button ID="btnAgregarFamiliar" runat="server" Text="Agregar" onclick="btnAgregarFamiliar_Click"/>
<asp:Button ID="btnQuitarFamiliar" runat="server" Text="Quitar" onclick="btnQuitarFamiliar_Click"/>
<br/>
<asp:ListBox runat="server" ID="lbFamiliares"/>
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</cc1:TabPanel>
</cc1:TabContainer>
//------------------------------CODE BEHIND------------------------------------
private XmlDocument objXML;
protected void Page_Load(object sender, EventArgs e){
objXML = new XmlDocument();}
protected void btnAgregarFamiliar_Click(object sender, EventArgs e){
XmlElement xmlFamiliar = objXML.CreateElement("familiar");
AddAttribute("nombre",txtNombreF.Text,xmlFamiliar);
AddAttribute("apaterno",txtApF.Text,xmlFamiliar);
hidFamiliares.Value+=xmlFamiliar.InnerXml;}
private void AddAttribute(string name, string val, XmlElement parent){
XmlAttribute at = objXML.CreateAttribute(name);
at.Value = val;
parent.SetAttributeNode(at);}
我不确定是什么原因导致的,您可能需要尝试一个更简单的场景来进行故障排除。
如果你的方法使用Label
控件,你可以总是使用一个不可见的控件而不是HiddenField
?
<asp:Label runat="server" id="hidFamiliares" style="display:none;"/>
有点猜测。
但从代码的外观来看,当您在UpdatePanel
中提交按钮事件时,它会重新加载面板,但不会重新加载HiddenField
的值,因此当UpdatePanel
内容加载时,它仍然会看到HiddenField
为空。
将HiddenField
封装在同一个UpdatePanel
中可能会起作用。或者,您可以尝试将其封装在自己的UpdatePanel
中,然后在按钮事件中调用UpdatePanel.Update()
,确保面板上的UpdateMode
设置为'Conditional'
。