我一直在处理这个问题好几个小时,但无法找到解决方案。 现在我在Web应用程序中工作,我的第一个问题是我想动态创建XML ...然后我意识到在回发之后,Xml正在重新发布。然后我只是说,“好吧,让我们创建一个HiddenField并将节点作为字符串存储在HiddenField值属性中,所以最后我只创建一个新的XmlElement,创建一个包含HiddenField.Value的InnerXml的文档片段并附加片段到XmlElement“......但是HiddenField.Value也会在每次点击按钮时重置......我刚用标签和IT工作测试了这个方法......
基本上我有一个用AJAXControlToolKit TabContainer Control分为两页的页面。第一种形式是用户主数据,而第二种形式的形式是用户填写表格的次数,因为它用于存储家庭成员。因此,过程是填充家庭成员数据,单击按钮并将其存储在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);}
答案 0 :(得分:7)
我不确定导致它的原因,您可能需要尝试更简单的方案进行故障排除。
如果您的方法适用于Label
控件,您可以使用不可见的控件而不是HiddenField
吗?
<asp:Label runat="server" id="hidFamiliares" style="display:none;"/>
答案 1 :(得分:1)
有点猜测。
但是根据代码的外观,当您在UpdatePanel
中提交按钮事件时,它会重新加载面板,但它不会重新加载HiddenField
的值,所以当{ {1}}内容加载后,它仍会将UpdatePanel
视为空。
将HiddenField
包装在同一HiddenField
中可能会有效。或者您可以尝试将其包装在自己的UpdatePanel
中,然后在按钮事件中调用UpdatePanel
,确保面板上的UpdatePanel.Update()
设置为UpdateMode
。