2009-08-20 3 views
1

abzurufen Ich habe ein ASP.net-Webformular, gibt es ein Update-Panel, das eine Tabelle mit Textfeldern enthält, in die der Benutzer Werte eingibt. Die Tabelle befindet sich in einem Updatepanel, da die Textfelder aus einer sehr langen Datenbankabfrage generiert werden. Es wird ein paar Sekunden nach dem Laden des Formulars mit einem Timer-Steuerelement generiert. Versuchen, Werte in einem UpdatePanel aus dem Code hinter

Wenn das Formular wird die Tabelle geschrieben zurück zu unserem Code nicht verfügbar ist ...

Hier ist der Code für diesen Abschnitt ist dies eine Dynamic Seite bearbeiten.

<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 

Antwort

3

Kann das wirklich nicht ohne irgendeinen Code feststellen. Ich vermute, dass Sie die Textfelder im falschen Teil des Seitenlebenszyklus generieren. Wenn Sie dies während OnInit() nicht tun und sie dann beim Senden erneut auf dieselbe Weise erstellen, werden keine Textfelder auf dem Formular angezeigt.

Denken Sie daran, dass jedes neue Postback ein neues Seitenobjekt mit einer neuen Reihe von Kontrollinstanzen erstellt. Wenn Ihre dynamischen Steuerelemente nicht jedes Mal auf dieselbe Weise erstellt werden, sind sie nicht vorhanden.

+0

Hallo womp, danke dafür, das ist nicht in OnInit getan, weil sie 30 Sekunden dauern, um die aktuellen Werte aus der db ziehen (fragen Sie nicht!). So sind sie ein paar Sekunden nach dem Laden der Seite über einen Timer fertig ... – DaveEHS

+0

Ja, wenn "GenerateSubjectsFavGrid (_ArticleID)" ist, wo Sie Ihre Textfelder dynamisch auf der Seite hinzufügen, dann ist dies das Problem. Alle Steuerelemente, die hier hinzugefügt werden, sind einfach nicht im nächsten Page-Objekt enthalten, das beim nächsten Postback erstellt wird. Ist das Raster immer gleich groß? Irgendeine Chance, das Gitter nicht-dynamisch zu machen, die Sichtbarkeit auf "falsch" zu setzen und es nur anzuzeigen, wenn es fertig ist, zu füllen? – womp

+0

Hallo womp, leider nicht, wird von Client zu Client variieren. Werden die Werte nicht in response.form sein? Ich denke, ich muss die Werte in der Sitzung speichern oder etwas, wenn sie sich über JavaScript ändern und dann die Werte von dort auffüllen. Wenn ich diese Konversation mache, denke ich, dass ich wahrscheinlich die nötigen Steuerelemente zwischenspeichern kann und mich dann nur um die Werte für die Sitzung kümmern muss. Danke, dass ich mich in die richtige Richtung gewandt habe. Prost, Dave. – DaveEHS

Verwandte Themen