c# - 当 "postback"使用 AJAX UpdatePanel 时,HiddenField 值属性变回空

标签 c# .net postback hiddenfield

我已经处理这个问题好几个小时了,但找不到解决方案。 现在我在 Web 应用程序中工作,我的第一个问题是我想动态创建一个 XML...然后我意识到在回发之后,Xml 正在重新设置。然后我只是想,“好吧,让我们创建一个 HiddenField 并将节点作为字符串存储在 HiddenField 值属性中,所以最后我只创建一个新的 XmlElement,创建一个包含 HiddenField.Value 的 InnerXml 的文档片段并附加fragmentto the XmlElement”...但是 HiddenField.Value 也会重置每次点击按钮...我刚刚用标签测试了这个方法并且它有效...

基本上,我有一个页面被 AJAXControlToolKit TabContainer 控件分成两部分。第一个表单用于用户主要数据,而第二个选项卡有一个表单,旨在根据用户需要多次填写表单,因为它用于存储家庭成员。所以过程是填充一个家庭成员数据,单击按钮并将其存储在 HiddenField.Value 中,填充第二个家庭成员数据并再次单击以添加新的家庭成员并连接到 HiddenField.Value ...但是我意识到在第一次点击 Load Page 方法后,HiddenField.Value 再次为空...

也许没那么重要,但在 UpdatePanel 上只有按钮和一个列表框来显示用户保存的所有家庭成员的一些数据,因此唯一在点击时刷新的对象是列表框。

正如我刚才所说,如果我使用 Label.Text 而不是使用 HiddenField.Value,一切正常...

<%@ 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;"/>

关于c# - 当 "postback"使用 AJAX UpdatePanel 时,HiddenField 值属性变回空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8915025/

相关文章:

c# - 获取字符串中字符第 n 次出现的索引

C# MySql 数据未正确写入/读取

c# - 在项目中编译resx文件或者直接使用resgen而不编译resx

c# - 为 Int32 到 Int64 转换生成警告

c# - 从并发字典c#中获取随机元素

.net - .NET 中 COMException HRESULT 错误代码的符号名称

c# - 替换特定项目中类的用法

javascript - 在 asp.net web 表单中单击按钮时避免回发

javascript - ASP.NET 在部分回发后获取隐藏字段的值

c# - 如何阻止 asp.net 在表单回发时重新附加查询字符串?