我有一个下拉菜单,根据选择的项目,我调用一个Web服务,然后动态创建一些文本框。
我第一次下拉菜单并选择一个项目,它完美地工作,文本框被动态创建和填充。但是,下次我下拉菜单(在第一次回发后),并选择不同的东西......在第二次回发后,原始值保留在文本框中。
我正在清除占位符中的所有文本框,然后重新创建它们,然后设置一个新值,它们如何保留OLD值...特别是如果我控制它们。从页面中清除它们?
注意:第二次创建它们时,文本框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是我的DropDown菜单。
答案 0 :(得分:0)
这可能是由于ViewState或者发布的值会破坏您的值。
一旦控件动态添加到控件集合中,它就需要赶上已经触发的所有页面生命周期事件。在回发的情况下,这意味着ViewState和/或发布的表单值将根据您将动态控件添加到控件集合并设置.text属性的顺序来破坏TextBox上的.text属性。
要解决此问题,您可以通过在动态生成控件上将.EnableViewState
属性设置为false来禁用ViewState,也可以在对控件集合设置任何属性之前将控件添加到控件集合中。
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
答案 1 :(得分:-1)
您是不是将值存储在Session变量中,然后将其放回代码中的文本框中?