通过列表框中的选定项目更新文本框
在ASP.NET中,我有一个dropdown
,其中有一些项目,我有button
和textbox
。我订阅了下拉菜单的SelectedIndexChanged
事件,其中我将下拉的新选定索引传递给将其索引(通过enum
)转换为字符串的结构。该字符串然后通过类中的一个属性获取到文本框中。通过列表框中的选定项目更新文本框
//Enum and struct representing index to string conversion for dropdown
Public Enum e_action
AcOne = 0
AcTwo
AcThree
AcThree
AcFour
End Enum
Public Structure Action
Public Sub New(ByVal index As Integer)
Select Case index
Case 0
action = e_action.AcOne
Case 1
action = e_action.AcTwo
Case 2
action = e_action.AcThree
Case 3
action = e_action.AcFour
Case 4
action = e_action.AcFive
End Select
End Sub
//这是在下拉菜单中的SelectedIndexChanged功能
Protected Sub dropdownAction_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dropdownAction.SelectedIndexChanged
Dim ddl As DropDownList = TryCast(sender, DropDownList)
If Not IsNothing(ddl) Then
Dim act As New Action(ddl.SelectedIndex)
p_two_action = act //p_two_action is a global var of type Action
End If
End Sub
//inside the button handler
dim myclass as MyClass
MyTextBox.Text = myclass.getAction //returns string of action done in dropdown
现在我的问题是,当你点击它(按钮)第一次,动作获取与更新在列表框中选择当前动作,但是当你再次单击该按钮时没有更改列表框中的任何内容,文本框显示文本框中的第零项(似乎重置),尽管它实际上并未在所有。
我猜这可能与按钮点击引起的回发有关,这会重置全局状态或某些内容,但我不确定。为什么当下拉框仍然是我第一次设置时它被重置?
有人可以帮忙吗?
如果这不清楚,请留下评论什么是不明确的。谢谢!
第二次(当您单击按钮但不选择列表中的任何内容时),SelectedIndexChanged事件不会被引发(因为您没有更改所选索引)。
您需要确保按钮处理程序中的逻辑还可以为当前选定的下拉列表的索引获取适当的操作。 p_two_action似乎正在重置 - 当你说它是一个全球性的,你是如何实现它的?
同意。将所有的逻辑放在按钮处理程序中可能会更好;无需在下拉菜单的selectedindexchanged事件中执行操作。 – 2011-03-11 23:28:02
你有没有在Page_Load事件中运行的任何代码?您是否尝试在click事件中运行带有断点的调试器,以查看myclass.getAction在第二次调用中返回的内容? – 2011-03-11 23:07:05
@Zach我真的很想调试它,但我不能。项目在远程计算机上... – 2011-03-11 23:13:50
使用值加载所有下拉框的函数位于页面加载函数中...也许这是导致问题的原因? – 2011-03-11 23:14:24