Динамично созданный DropDownList теряет ListItems на Обратной передаче

Это прекрасная возможность объединить zip() , cycle() и enumerate() .

.

cycle() обеспечит ваше требование «начать заново».
zip() позволяет вам повторять два списка одновременно.
enumerate() используется, чтобы решить добавить или вычесть значения.

from itertools import cycle

digits = listOfDigits
values = cycle(listOfValues)

for i, (digit, value) in enumerate(zip(digits, values)):
    if i % 2 == 0:
        print(digit - value)
    else:
        print(digit + value)

7
задан schudel 8 March 2009 в 13:56
поделиться

5 ответов

Я нашел решение, которое позволит мне сохранять состояние отображения через обратные передачи. Это должно назвать TrackViewState ItemCollection.

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

Благодаря всем для Вашей справки.

Это - рабочее решение:

<%@ 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>
6
ответ дан 7 December 2019 в 14:38
поделиться

DDL поддержит свои объекты и выбор, когда состояние отображения будет включено. Текстовое поле поддержит свое содержание независимо от состояния отображения, так как получающийся HTML записывается обратно к серверу на обратной передаче.

Я нахожу это courious, что у Вас есть все эти операторы состояния отображения в Вашем коде и разметке.

Одна из нескольких вещей происходит:

  1. ViewState при управлении отключен
  2. ViewState выше contrl hierachy отключен (страница, форма, панель)
  3. Вы динамично добавляете управление слишком поздно в цикле страницы для выбора, который будет загружен из состояния отображения. Загрузка в INIT должна быть прекрасной.
0
ответ дан 7 December 2019 в 14:38
поделиться

Элементы списка в DropDownList не хранятся в поле зрения состояние. Необходимо будет добавить их на каждой обратной передаче.

Что хранится в поле зрения, состояние является выбранным индексом - т.е. 'значение' управления.

Править: Ну, кажется, что я изучил что-то сегодня. Я признаю ошибку :-)

-1
ответ дан 7 December 2019 в 14:38
поделиться

Можете быть Вы, должен явно активировать ViewState для тех DropDownLists...

Править: Это - то, что я подразумеваю под своим последним комментарием...

    <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"))

          Dim i As Integer
          For i = 0 To 3
            Dim ddl As New DropDownList
            ddl.ID = "ddlPage" & i
            ddl.EnableViewState = True
            ddl.Items.Add(New ListItem("12", "13"))
            ddl.Items.Add(New ListItem("14", "15"))

            pnlDynamic.Controls.Add(ddl)
            Dim txtBx As New TextBox
            txtBx.ID = "txtPage" & i
            txtBx.Text = "Preset"
            pnlDynamic.Controls.Add(txtBx)
          Next
        End If
      End Sub
   </script>
0
ответ дан 7 December 2019 в 14:38
поделиться

Я всегда использую Page_Load и никогда не испытывайте затруднения как это. Возможно, что-то Вы могли посмотреть на.

Я обычно связываю данные со средствами управления в первый раз загрузки страницы, и после того дескриптора Состояния отображения, которому позволяют, обратные передачи и т.д. Обратите внимание, что они предлагают, чтобы Вы связали данные во время Page_Load ...

Выезд http://support.microsoft.com/kb/305141

События страницы loadTOCNode (2, 'moreinformation'); Во время жизненного цикла страницы ASP.NET несколько стандартных событий, которые выставляются от Объекта страницы, часто используются. Платформа страницы ASP.NET автоматически соединяется с (или обеспечивает электричеством), соответствующие экземпляры делегата во время выполнения для этих методов. Это сохраняет Вас от необходимости написать необходимый "код связующего звена". Следующий список представляет экземпляры делегата, которые обеспечены электричеством во время выполнения в порядке, в который они уволены:
  • Page_Init: Во время этого события можно инициализировать значения или соединить любые обработчики событий, которые Вы можете иметь.
  • Page_Load: Во время этого события можно выполнить ряд действий, чтобы или создать страницу ASP.NET впервые или ответить на клиентские события, которые следуют из сообщения. Страница и состояние отображения управления были восстановлены до этого события. Используйте свойство страницы IsPostBack, чтобы проверить, является ли это первым разом, когда страница обрабатывается. Если это - первый раз, выполните привязку данных. Кроме того, считайте и обновите свойства элементов управления.
  • Page_DataBind: событие DataBind генерируется, когда метод DataBind называют на уровне страницы. При вызове DataBind на отдельных средствах управления он только запускает событие DataBind средств управления под ним.
  • Page_PreRender: событие PreRender запущено непосредственно перед тем, как состояние отображения сохраняется, и средства управления представляются. Можно использовать это событие для выполнения любых последних операций на средствах управления.
  • Page_Unload: После того, как страница закончила представлять, огни события Page_Unload. Это событие является хорошим местом для выполнения заключительной работы очистки. Это включает объекты, такие как очистка открытых соединений с базой данных, отбрасывая объекты, или закрывая те файлы, которые открыты.
Следующий список обрисовывает в общих чертах события, которые недетерминированы:
  • Page_Error: Если необработанное исключение происходит во время обработки страницы, огней события Error. Событие Error дает Вам возможность корректно обработать ошибки.
  • Page_AbortTransaction: события Транзакции полезны, если Вы хотите указать, успешно выполняется ли транзакция или перестала работать. Это событие является наиболее часто используемым для сценариев корзины, в которых это событие может указать на успешность или неуспешность порядка. Это событие стреляет, когда транзакция была прервана.
  • Page_CommitTransaction: Это событие стреляет, когда транзакция фиксировалась успешно.
-1
ответ дан 7 December 2019 в 14:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: