Свойство HiddenField Value возвращается к пустому при «обратной передаче» с использованием AJAX UpdatePanel - PullRequest
4 голосов
/ 18 января 2012

Я работал над этой проблемой часами и не могу найти решение. Сейчас я работаю в веб-приложении, и моя первая проблема заключалась в том, что я хотел создать XML динамически ... Затем я понял, что после обратной передачи Xml перераспределяется. Затем я просто хочу сказать: «Хорошо, давайте создадим HiddenField и сохраним узлы в виде строки в свойстве значения HiddenField, поэтому в конце я просто создаю новый XmlElement, создаю фрагмент документа с InnerXml объекта HiddenField.Value и присоединяю фрагмент к XmlElement "... Но HiddenField.Value также сбрасывает каждый щелчок по кнопке ... Я только что проверил этот метод с меткой, и он работает ...

По сути, у меня есть страница, разделенная на две части с помощью элемента управления TabContainer AJAXControlToolKit. Первая форма предназначена для основных данных пользователя, в то время как вторая вкладка имеет форму, которая предназначена для заполнения формы столько раз, сколько пользователь хочет, поскольку она предназначена для хранения членов семьи. Таким образом, процесс состоит в том, чтобы заполнить данные члена семьи, нажать кнопку и сохранить их в HiddenField.Value, заполнить данные второго члена семьи и снова щелкнуть, чтобы добавить нового члена семьи и объединить его с HiddenField.Value ... Но Я понял, что после первого щелчка по методу Load Page, HiddenField.Value снова пусто ...

Может быть, это не так важно, но на панели обновления есть только кнопка и список, в котором отображаются некоторые данные всех членов семьи, сохраненных пользователем, поэтому единственным объектом, который обновляется при щелчке, является список.

Как я только что сказал, если вместо этого использую HiddenField.Value, я использую Label.Text, все работает ...

<%@ 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);}

Ответы [ 2 ]

7 голосов
/ 19 января 2012

Я не уверен, что является причиной, возможно, вам придется попробовать более простой сценарий для устранения неполадок.

Если ваш метод работает с Label элементом управления, вы всегда можете использовать невидимый вместо HiddenField?

<asp:Label runat="server" id="hidFamiliares" style="display:none;"/>
1 голос
/ 19 января 2012

Немного догадки.

Но, судя по виду кода, когда вы отправляете событие кнопки в UpdatePanel, она перезагружает панель, но не перезагружает значение вашего HiddenField, поэтому при загрузке контента UpdatePanel он все равно видит HiddenField пустым.

Перенос HiddenField в тот же UpdatePanel может работать.Или вы можете попробовать обернуть его в свой собственный UpdatePanel, а затем вызвать UpdatePanel.Update() в вашем событии кнопки, убедившись, что на панели UpdateMode установлено значение 'Conditional'.

...