我必须在页面上隐藏我可以使用JavaScript触发的按钮(__dopostback ...) 我的页面上还有一个对象列表和一个下拉列表,用户可以在页面上对这些对象进行排序。
我的代码检查列表的Databind上的下拉列表的当前值,并将选择的排序方法应用于列表。
当用户从列表中选择了另一种排序方法时,将触发第一个按钮。
当用户将新项目添加到列表时,将触发第二个按钮。 Sortmethod" sort2"如果发生这种情况,应该在下拉列表中自动设置。
因此,当单击第二个按钮时,我需要动态设置下拉列表的选定项目,以便稍后在下拉列表的DataBind方法中检查所选值的值,并知道应该应用哪种排序方法。
我希望它能以某种方式清楚,所以你可以帮助我。我没有成功动态更改所选值。
我使用控件:首先是objects.vb,第二个是ObjectContainer.vb Objects.vb包含两个按钮,下拉列表和objectcontainer的实例。 objectcontainer包含具有对象的列表,这些对象需要根据在对象控件中选择的值进行排序。
Objects.vb:
Private sortMethod As DropdownList
Private container as ObjectContainer
Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
MyBase.OnInit(e)
EnsureChildControls()
End Sub
Protected Overrides Sub CreateChildControls()
MyBase.CreateChildControls()
' Add sorting
sortMethod = New DropDownList()
sortMethod.ID = "sortlist"
CType(sortMethod.Items, IStateManager).TrackViewState()
If Not Page.IsPostBack Then
Dim sort1 As New ListItem()
sort1.Text = "Sort Method 1"
sort1.Value = "sort1"
Dim sort2 As New ListItem()
sort2.Text = "Sort Method 2"
sort2.Value = "sort2"
Dim sort3 As New ListItem()
sort3.Text = "Sort Method 3"
sort3.Value = "sort3"
sortMethod.Items.Add(sort1)
sortMethod.Items.Add(sort2)
sortMethod.Items.Add(sort3)
sortMethod.AutoPostBack = False
sortMethod.EnableViewState = True
sortMethod.Attributes.Add("onchange", "javascript:TriggerPostbackButtonUpdate()")
End If
Me.Controls.Add(sortMethod)
container = New ObjectContainer
container.ID = "oc"
Me.Controls.Add(container)
End Sub
Protected Sub ButtonUpdate_Click(ByVal sender As Object, ByVal e As System.EventArgs)
container.SortMethodAndOrder = sortMethod.SelectedValue
container.DataBind()
End Sub
'when this event is triggered, the "sort2" item should be selected after the postback
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
sortMethod.SelectedIndex = sortMethod.Items.IndexOf(sortMethod.Items.FindByValue("sort2"))
container.SortMethodAndOrder = "sort2"
container.DataBind()
End Sub
ObjectContainer.vb:
Public Overloads Overrides Sub DataBind()
EnsureChildControls()
Dim objects As ObjectsCollection = Nothing
If objects.Count <> 0 Then
Dim sortList As DropDownList = DirectCast(Me.Parent.FindControl("sortlist"), DropDownList)
If sortList IsNot Nothing Then
'sort based on the selected value in the dropdownlist
End If
End If
End Sub
我可以提供您需要的任何信息来帮助我。我真的很感谢你的时间,所以非常感谢你花了一些时间来阅读这篇文章!
答案 0 :(得分:1)
我没有理由在您的代码中手动调用TrackViewState。 有没有具体的理由来称呼它?否则,我会删除它。
不知道这是否有任何帮助,但我倾向于使用以下两行(作为C#用户,但我认为它没有任何区别):
sortMethod.ClearSelection()
sortMethod.Items.FindByValue("sort2").Selected = true
而不是:
sortMethod.SelectedIndex = sortMethod.Items.IndexOf(sortMethod.Items.FindByValue("sort2"))
答案 1 :(得分:0)
以下是id如何使用jquery在触发回发之前设置下拉列表的选定值。
$(".myDropDownList").val("sort2");
__doPostBack(uniqueIdOfMyButton,'');