动态创建的 DropDownList 在回发时丢失 ListItems [英] Dynamically created DropDownList loses ListItems on Postback

查看:17
本文介绍了动态创建的 DropDownList 在回发时丢失 ListItems的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个页面,其中包含一些动态创建的控件(TextBox 和 DropDownList).发生回发时,TextBox 会保留其值,但 DropDownList 会丢失其 ListItem.这很令人困惑,因为页面级别的 DropDownList 也保留了它的 ListItems.谁能看出下面的代码有什么问题?

对解决此问题的任何帮助将不胜感激.

<%@ Page Language="VB"%><script runat="server">Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)如果不是 Page.IsPostBack 那么ddlFixed.Items.Add(New ListItem("12", "13"))ddlFixed.Items.Add(New ListItem("14", "15"))万一Dim i 作为整数对于 i = 0 到 3Dim ddl 作为新的 DropDownListddl.ID = "ddlPage" &一世ddl.EnableViewState = True如果不是 Page.IsPostBack 那么ddl.Items.Add(New ListItem("12", "13"))ddl.Items.Add(New ListItem("14", "15"))万一pnlDynamic.Controls.Add(ddl)将 txtBx 调暗为新文本框txtBx.ID = "txtPage" &一世如果不是 Page.IsPostBack 那么txtBx.Text = "预设"万一pnlDynamic.Controls.Add(txtBx)下一个结束子<html xmlns="http://www.w3.org/1999/xhtml"><head runat="服务器"><title></title><身体><form id="form1" runat="server" enableviewstate="true"><div><br/><br/><a href="Default.aspx">Get-Request</a><br/><br/><asp:Panel runat="server" ID="pnlDynamic" EnableViewState="true"/><br/><br/><asp:DropDownList runat="server" ID="ddlFixed"/><asp:Button runat="server" ID="btn" Text="Postback"/>

</表单>

解决方案

我找到了可以让我在回发中保持视图状态的解决方案.就是调用ItemCollection的TrackViewState.

CType(ddl.Items, IStateManager).TrackViewState()

感谢大家的帮助.

这是可行的解决方案:

<%@ Page Language="VB"%><script runat="server">Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)如果不是 Page.IsPostBack 那么ddlFixed.Items.Add(New ListItem("12", "13"))ddlFixed.Items.Add(New ListItem("14", "15"))万一Dim i 作为整数对于 i = 0 到 3Dim ddl 作为新的 DropDownListddl.ID = "ddlPage" &一世CType(ddl.Items, IStateManager).TrackViewState()如果不是 Page.IsPostBack 那么ddl.Items.Add(New ListItem("12", "13"))ddl.Items.Add(New ListItem("14", "15"))万一pnlDynamic.Controls.Add(ddl)将 txtBx 调暗为新文本框txtBx.ID = "txtPage" &一世如果不是 Page.IsPostBack 那么txtBx.Text = "预设"万一pnlDynamic.Controls.Add(txtBx)下一个结束子<html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat="server"><title></title><身体><form id="form1" runat="server" ><div><br/><br/><a href="Default.aspx">Get-Request</a><br/><br/><asp:Panel runat="server" ID="pnlDynamic"/><br/><br/><asp:DropDownList runat="server" ID="ddlFixed"/><asp:Button runat="server" ID="btn" Text="Postback"/>

</表单>

I have a page that contains some dynamically created controls (TextBox and DropDownList). When a postback occurs, the TextBoxes keep their values, but the DropDownLists lose their ListItems. This is quite confusing, since the page level DropDownList also keeps its ListItems. Can anyone see what's wrong with the code below?

Any help in solving this issue would be greatly appreciated.

<%@ Page Language="VB"%>

<script runat="server">
  Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)
    If Not Page.IsPostBack Then
      ddlFixed.Items.Add(New ListItem("12", "13"))
      ddlFixed.Items.Add(New ListItem("14", "15"))
    End If
    Dim i As Integer
    For i = 0 To 3
      Dim ddl As New DropDownList
      ddl.ID = "ddlPage" & i
      ddl.EnableViewState = True
      If Not Page.IsPostBack Then
        ddl.Items.Add(New ListItem("12", "13"))
        ddl.Items.Add(New ListItem("14", "15"))
      End If
      pnlDynamic.Controls.Add(ddl)
      Dim txtBx As New TextBox
      txtBx.ID = "txtPage" & i
      If Not Page.IsPostBack Then
        txtBx.Text = "Preset"
      End If
      pnlDynamic.Controls.Add(txtBx)
    Next
  End Sub
</script>


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title></title>
</head>
<body>
  <form id="form1" runat="server" enableviewstate="true">
  <div>
    <br />
    <br />
    <a href="Default.aspx">Get-Request</a>
    <br />
    <br />
    <asp:Panel runat="server" ID="pnlDynamic" EnableViewState="true" />    
    <br />
    <br />
    <asp:DropDownList runat="server" ID="ddlFixed" />
    <asp:Button runat="server" ID="btn" Text="Postback"/>
  </div>
  </form>
</body>
</html>

解决方案

I have found the solution that will allow me to keep the viewstate across postbacks. It's to call TrackViewState of the ItemCollection.

CType(ddl.Items, IStateManager).TrackViewState()

Thanks to all for your help.

This is the working solution:

<%@ Page Language="VB"%>

<script runat="server">
  Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)
    If Not Page.IsPostBack Then
      ddlFixed.Items.Add(New ListItem("12", "13"))
      ddlFixed.Items.Add(New ListItem("14", "15"))
    End If
    Dim i As Integer
    For i = 0 To 3
      Dim ddl As New DropDownList
      ddl.ID = "ddlPage" & i
      CType(ddl.Items, IStateManager).TrackViewState()
      If Not Page.IsPostBack Then
        ddl.Items.Add(New ListItem("12", "13"))
        ddl.Items.Add(New ListItem("14", "15"))
      End If
      pnlDynamic.Controls.Add(ddl)
      Dim txtBx As New TextBox
      txtBx.ID = "txtPage" & i
      If Not Page.IsPostBack Then
        txtBx.Text = "Preset"
      End If
      pnlDynamic.Controls.Add(txtBx)
    Next
  End Sub
</script>


<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  <title></title>
</head>
<body>
  <form id="form1" runat="server" >
  <div>
    <br />
    <br />
    <a href="Default.aspx">Get-Request</a>
    <br />
    <br />
    <asp:Panel runat="server" ID="pnlDynamic" />    
    <br />
    <br />
    <asp:DropDownList runat="server" ID="ddlFixed" />
    <asp:Button runat="server" ID="btn" Text="Postback"/>
  </div>
  </form>
</body>
</html>

这篇关于动态创建的 DropDownList 在回发时丢失 ListItems的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
C#/.NET最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆