1 votes

J'essaie de récupérer les valeurs d'un UpdatePanel à partir du code sous-jacent.

J'ai un formulaire web asp.net, il y a un panneau de mise à jour qui contient un tableau avec des zones de texte dans lesquelles l'utilisateur entre des valeurs. Le tableau est dans un panneau de mise à jour car les zones de texte sont générées à partir d'une requête de base de données très longue. Elle est générée quelques secondes après le chargement du formulaire à l'aide d'un contrôle de temporisation.

Quand le formulaire est renvoyé, la table n'est pas disponible pour notre code...

Voici le code de cette section, c'est une page d'édition de DynamicData.

 <asp:UpdateProgress ID="UpdateProgress1" runat="server" 
            AssociatedUpdatePanelID="UpdatePanel2">
            <ProgressTemplate>
                <div>Getting subjects...</div>
            </ProgressTemplate>
        </asp:UpdateProgress>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"  >
            <ContentTemplate>
                <asp:Timer ID="Timer1" runat="server" Interval="2000" Enabled="false" >
                </asp:Timer>
                <div id="subjects_fav">
                    <asp:Table ID="tabSubjectsFav" runat="server" BorderWidth="2" BorderColor="Aquamarine">
                    </asp:Table>
                </div>

            <asp:Button ID="UpdateButton" runat="server" OnClick="SaveEverything" Text="Save Everything" />

            </ContentTemplate>
        </asp:UpdatePanel>

Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
    'DynamicDataManager1.RegisterControl(DetailsView1)
    DynamicDataManager1.RegisterControl(lvArticles1)
    DynamicDataManager1.RegisterControl(lvArticles2)
    DynamicDataManager1.RegisterControl(lvArticles3)
    DynamicDataManager1.RegisterControl(lvArticles4)
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

    'trying to get the id_project for this page
    'get article id for first article

    If Not IsPostBack Then
        Timer1.Enabled = True
    Else
        UpdatePanel2.Update()
    End If

    'now get related project from db
    Dim db As New MTRData.mtddDataContext()
    Dim art = (From a In db.articles _
                 Where a.id = Request.QueryString("id") Take 1 _
                 Select a).SingleOrDefault()
    'txtid_project.Text = art.id_project

    'need to use this all over the place so saving it as a property type thing as well
    _ProjectID = art.id_project
    _PublicationID = art.id_publication
    _ArticleID = art.id

End Sub

Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick

    If boolTimerFired = False Then
        Timer1.Enabled = False
        boolTimerFired = True
        GenerateSubjectsFavGrid(_ArticleID)
        UpdatePanel2.Update()
    End If
    Timer1.Enabled = False

End Sub

3voto

womp Points 71924

Je ne peux pas vraiment diagnostiquer ça sans code. Je suppose que vous générez les zones de texte dans la mauvaise partie du cycle de vie de la page. Si vous ne le faites pas pendant OnInit(), et si vous ne les reconstruisez pas de la même manière lors de l'envoi, alors il n'y aura pas de zones de texte sur le formulaire.

N'oubliez pas que chaque nouveau postback crée un nouvel objet page avec un nouvel ensemble d'instances de contrôle. Si vos contrôles dynamiques ne sont pas créés de la même manière à chaque fois, ils ne seront tout simplement pas présents.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X