动态创建的DropDownList失去对回发ListItems的 [英] Dynamically created DropDownList loses ListItems on Postback

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

问题描述

我有一个包含一些动态创建的控件(文本框和DropDownList的)的页面。当回发时,文本框保持其价值,但DropDownLists失去ListItems的。
这是相当混乱,因为在页级别DropDownList中也保持其ListItems的。任何人都可以看看有什么不对的code以下?

在解决这一问题将是极大的AP preciated任何帮助。

 <%@页面语言=VB%GT;<脚本=服务器>
  保护小组Page_Init(BYVAL发件人为对象,BYVAL E上System.EventArgs)
    如果没有Page.IsPostBack然后
      ddlFixed.Items.Add(新列表项(12,13))
      ddlFixed.Items.Add(新建列表项(14,15))
    万一
    昏暗我作为整数
    对于i = 0至3
      朦胧DDL作为新的DropDownList
      ddl.ID =ddlPage与&一世
      ddl.EnableViewState = TRUE
      如果没有Page.IsPostBack然后
        ddl.Items.Add(新列表项(12,13))
        ddl.Items.Add(新建列表项(14,15))
      万一
      pnlDynamic.Controls.Add(DDL)
      昏暗txtBx作为新文本框
      txtBx.ID =txtPage与&一世
      如果没有Page.IsPostBack然后
        txtBx.Text =preSET
      万一
      pnlDynamic.Controls.Add(txtBx)
    下一个
  结束小组
< / SCRIPT>
< HTML的xmlns =htt​​p://www.w3.org/1999/xhtml>
<头=服务器>
  <标题>< /标题>
< /头>
<身体GT;
  <表ID =form1的=服务器的EnableViewState =真>
  < D​​IV>
    < BR />
    < BR />
    < A HREF =Default.aspx的>获取请求< / A>
    < BR />
    < BR />
    < ASP:面板=服务器ID =pnlDynamic的EnableViewState =真/>
    < BR />
    < BR />
    < ASP:DropDownList的=服务器ID =ddlFixed/>
    < ASP:按钮=服务器ID =BTN文本=回传/>
  < / DIV>
  < /表及GT;
< /身体GT;
< / HTML>


解决方案

我已经找到了解决方案,让我继续视图状态在回传。
这是调用ItemCollection的TrackViewState。

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

感谢所有您的帮助。

这是工作的解决方案:

 <%@页面语言=VB%GT;<脚本=服务器>
  保护小组Page_Init(BYVAL发件人为对象,BYVAL E上System.EventArgs)
    如果没有Page.IsPostBack然后
      ddlFixed.Items.Add(新列表项(12,13))
      ddlFixed.Items.Add(新建列表项(14,15))
    万一
    昏暗我作为整数
    对于i = 0至3
      朦胧DDL作为新的DropDownList
      ddl.ID =ddlPage与&一世
      CTYPE(ddl.Items,IStateManager).TrackViewState()
      如果没有Page.IsPostBack然后
        ddl.Items.Add(新列表项(12,13))
        ddl.Items.Add(新建列表项(14,15))
      万一
      pnlDynamic.Controls.Add(DDL)
      昏暗txtBx作为新文本框
      txtBx.ID =txtPage与&一世
      如果没有Page.IsPostBack然后
        txtBx.Text =preSET
      万一
      pnlDynamic.Controls.Add(txtBx)
    下一个
  结束小组
< / SCRIPT>
< HTML的xmlns =htt​​p://www.w3.org/1999/xhtml>
<头ID =头像1=服务器>
  <标题>< /标题>
< /头>
<身体GT;
  <表ID =form1的=服务器>
  < D​​IV>
    < BR />
    < BR />
    < A HREF =Default.aspx的>获取请求< / A>
    < BR />
    < BR />
    < ASP:面板=服务器ID =pnlDynamic/>
    < BR />
    < BR />
    < ASP:DropDownList的=服务器ID =ddlFixed/>
    < ASP:按钮=服务器ID =BTN文本=回传/>
  < / DIV>
  < /表及GT;
< /身体GT;
< / HTML>

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆