ドロップダウンメニューがあり、選択されている項目に基づいてWebサービスを呼び出していくつかのテキストボックスを動的に作成します。プログラムで作成されたASP.NET TextBoxは、コントロールがクリアされてもポストバック後のテキスト値を保持します
初めてメニューをドロップして項目を選択すると、完全に機能し、テキストボックスが作成され、動的に取り込まれます。しかし、次回(最初のポストバックの後に)メニューをドロップダウンし、別のものを選択します... 2回目のポストバックの後、元の値はテキストボックスに残ります。
プレースホルダからすべてのテキストボックスを消去してから再作成し、NEW値を設定すると、OLD値をどのように保持できますか? ?
注:2回目の作成時に、テキストボックス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イベントに移動すると、同じ動作が発生しますか? – TheGeekYouNeed
これはドロップダウンリストの選択された項目に依存する場所がわかりません。なぜ選択項目に基づいてこれが異なるのかわかりません...何が欠けていますか? – David
@ TheGeekこれをPage_Initに入れた場合、コントロールは表示されません – Dave