4

私はこの問題に何時間も取り組んできましたが、解決策が見つかりません。現在、私は Web アプリケーションで作業していますが、最初の問題は XML を動的に作成したいということでした...その後、ポストバック後に Xml がリセットされていることに気付きました。次に、「OK、HiddenField を作成し、ノードを HiddenField 値プロパティに文字列として格納し続けます。そのため、最後に新しい XmlElement を作成し、HiddenField.Value の InnerXml を使用してドキュメント フラグメントを作成し、 XmlElement"...しかし、HiddenField.Valueもボタンをクリックするたびにリセットされます...ラベルを使用してこのメ​​ソッドをテストしたところ、IT WORKS ...

基本的に、AJAXControlToolKit TabContainer コントロールで 2 つに分割されたページがあります。最初のフォームはユーザーのメイン データ用で、2 番目のタブには、家族のメンバーを保存するため、ユーザーが何度でもフォームに入力するためのフォームがあります。したがって、プロセスは、家族のメンバーのデータを入力し、ボタンをクリックして HiddenField.Value に保存し、2 番目の家族のメンバーのデータを入力し、もう一度クリックして新しい家族のメンバーを追加し、HiddenField.Value に連結します...しかしLoad Page メソッドを最初にクリックした後、HiddenField.Value が再び空になっていることに気付きました...

それほど重要ではないかもしれませんが、UpdatePanel には、ユーザーが保存したすべての家族のデータを表示するためのボタンとリストボックスしかないため、クリック時に更新される唯一のオブジェクトはリストボックスです。

先ほど言ったように、代わりに 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);}
4

2 に答える 2

7

何が原因なのかわかりません。トラブルシューティングを行うには、より簡単なシナリオを試す必要があるかもしれません。

メソッドがコントロールで動作する場合は、常に?Labelの代わりに非表示のものを使用できます。HiddenField

<asp:Label runat="server" id="hidFamiliares" style="display:none;"/>
于 2012-01-18T20:07:57.013 に答える
1

推測のビット。

しかし、コードを見ると、 内でボタン イベントを送信するUpdatePanelと、パネルがリロードされますが、 の値はリロードされませんHiddenField。そのため、UpdatePanelコンテンツがロードされると、 はまだHiddenField空として表示されます。

HiddenField同じようにラップするとうまくいくUpdatePanelかもしれません。または、それを独自にラップしてから、ボタンイベント内でUpdatePanel呼び出して、パネルでが設定されていることを確認することもできます。UpdatePanel.Update()UpdateMode'Conditional'

于 2012-01-18T20:14:08.423 に答える