【发布时间】:2011-06-12 20:45:27
【问题描述】:
我有一个下拉菜单,根据选择的项目,我调用一个网络服务,然后动态创建一些文本框。
我第一次下拉菜单并选择一个项目时,它运行良好,并且文本框是动态创建和填充的。但是,下次我下拉菜单时(在第一次回发之后),并选择不同的东西......在第二次回发之后,原始值仍保留在文本框中。
我正在清除占位符中的所有文本框,然后重新创建它们,然后设置一个新值,它们如何保留旧值...尤其是如果我控制它们。从页面中清除它们?
注意:第二次创建它们时,文本框 ID 最终会相同。这可能与它有关吗?需要支持这种重复 ID 功能。
我的代码,从 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
RecordValue.Value 是在每个 Page_Load 中填充的隐藏字段:
RecordValue.Value = RecordList.SelectedValue
RecordList 是我的下拉菜单。
【问题讨论】:
-
如果将此代码移至 Page_Init 事件,是否会发生相同的行为?
-
我看不出这取决于下拉列表中的所选项目,所以我不明白为什么这会根据所选项目而有所不同...什么是我失踪了?
-
@TheGeek 如果我把它放在 Page_Init 中,控件永远不会出现
-
@David 我添加了代码,显示返回的 XML 如何依赖于下拉菜单中的内容
标签: asp.net vb.net controls textbox postback