Программно созданный ASP.NET TextBox сохраняет значение текста после PostBack, даже если элемент управления очищен - PullRequest
0 голосов
/ 21 января 2011

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

При первом раскрытии меню и выборе элементаэто работает отлично, и текстовые поля создаются и заполняются динамически.Однако в следующий раз, когда я выпадаю из меню (после первой обратной передачи) и выбираю что-то другое ... после второй обратной передачи исходные значения остаются в текстовых полях.

Я очищаю весь текстЯщики из заполнителя, затем воссоздавая их, а затем устанавливая НОВОЕ значение, как они могут сохранять СТАРОЕ значения ... особенно, если я управляю ими. clear со страницы?

Примечание: ВторойКогда они создаются, идентификаторы текстового поля ДОЛЖНЫ быть одинаковыми.Может ли это быть как-то связано с этим?Эта дублирующая функциональность идентификатора должна поддерживаться.

Мой код, вызываемый из Page_Load, выглядит следующим образом: (отредактировано для добавления дополнительного кода)

Private Sub RefreshEntity()

        Dim XmlRecords As New XmlDocument
        Dim XmlRecordsNode As XmlNode
        Dim EntityType As String = EntityTypes.SelectedValue
        Dim Entity As String = RecordValue.Value
        Dim FieldName As String
        Dim FieldValue As String

        FieldPlaceHolder.Controls.Clear()

        If RecordList.SelectedValue <> "Select..." Then
            Try
                XmlRecordsNode = LoginInfo.SharePointConnectWebService.GetMetaData(LoginInfo.WSUser, LoginInfo.WSPass, _
                                                                                  EntityType, Entity)
                XmlRecords.LoadXml(XmlRecordsNode.OuterXml)
            Catch ex As Exception
                ConfirmLabel.Text = "<b>Error:</b><br>" & ex.Message.ToString
                Return
            End Try
        Else
            SetProperties.Visible = False
            Return
        End If

        For Each OneNode As XmlNode In XmlRecords.SelectNodes("Fields").Item(0).ChildNodes

            FieldName = OneNode.Name
            FieldValue = OneNode.InnerText

            Dim newLabel As Label = New Label()
            newLabel.Text = FieldName & ":   "

            Dim newTextBox As TextBox = New TextBox()
            newTextBox.ID = "Field-" & FieldName
            newTextBox.Text = FieldValue

            Dim newLine As Label = New Label()
            newLine.Text = "<br><br>"

            FieldPlaceHolder.Controls.Add(newLabel)
            FieldPlaceHolder.Controls.Add(newTextBox)
            FieldPlaceHolder.Controls.Add(newLine)

        Next

        SetProperties.Visible = True

    End Sub

скрытое поле, которое заполняется в каждом Page_Load:

                RecordValue.Value = RecordList.SelectedValue

Где RecordList - это мое меню DropDown.

Ответы [ 2 ]

0 голосов
/ 21 января 2011

Скорее всего, это связано с тем, что ViewState или опубликованные значения перекрывают ваши значения.

Как только элемент управления динамически добавляется в коллекцию элементов управления, он должен отслеживать все события жизненного цикла страницы, которые уже сработали. В случае обратной публикации это означает, что ViewState и / или значение опубликованной формы будут засорять свойство .text в TextBox в зависимости от порядка добавления динамических элементов управления в коллекцию элементов управления и установки свойства .text.

Чтобы это исправить, вы можете отключить ViewState, установив для свойства .EnableViewState значение false для динамически генерируемых элементов управления, также добавьте элементы управления в коллекцию элементов управления, прежде чем устанавливать для них какие-либо свойства.

For Each OneNode As XmlNode In XmlRecords.SelectNodes("Fields").Item(0).ChildNodes

    FieldName = OneNode.Name
    FieldValue = OneNode.InnerText

    Dim newLabel As Label = New Label()
    Dim newTextBox As TextBox = New TextBox()
    Dim newLine As Label = New Label()

    newTextBox.ID = "Field-" & FieldName

    newLabel.EnableViewState = False
    newTextBox.EnableViewState = False
    newLine.EnableViewState = False

    FieldPlaceHolder.Controls.Add(newLabel)
    FieldPlaceHolder.Controls.Add(newTextBox)
    FieldPlaceHolder.Controls.Add(newLine)

    newLabel.Text = FieldName & ":   "
    newTextBox.Text = FieldValue
    newLine.Text = "<br><br>"

Next
0 голосов
/ 21 января 2011

Вы не сохраняете значение в переменной Session, а затем помещаете его обратно в текстовое поле позже в своем коде?

...