编程语言
首页 > 编程语言> > c# – 当使用AJAX UpdatePanel“回发”时,HiddenField Value属性返回空

c# – 当使用AJAX UpdatePanel“回发”时,HiddenField Value属性返回空

作者:互联网

我一直在处理这个问题几个小时,无法找到解决方案.
现在我在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);}

解决方法:

我不确定是什么导致它,你可能不得不尝试一个更简单的方案来排除故障.

如果你的方法适用于Label控件,你总是可以使用不可见的而不是HiddenField?

<asp:Label runat="server" id="hidFamiliares" style="display:none;"/>

标签:c,net,postback,hiddenfield
来源: https://codeday.me/bug/20190610/1208661.html