尝试从后面的代码中检索UpdatePanel中的值

时间:2009-08-20 15:24:15

标签: asp.net-ajax

我有一个asp.net网络表单,有一个更新面板,其中包含一个表格,其中包含用户输入值的文本框。该表位于更新面板中,因为文本框是从长时间运行的数据库查询生成的。它是在使用计时器控件加载表单后几秒钟生成的。

当回发表单时,我们的代码无法使用该表...

以下是该部分的代码,这是一个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

1 个答案:

答案 0 :(得分:3)

如果没有一些代码,无法真正诊断出来。我猜你在页面生命周期的错误部分生成了文本框。如果您在OnInit()期间没有这样做,然后在提交时以相同的方式重建它们,那么表单上就不会有任何文本框。

请记住,每个新的回发都会创建一个新的页面对象,其中包含一组全新的控件实例。如果每次都没有以相同的方式创建动态控件,那么它们就不会出现在那里。