通过列表框中的选定项目更新文本框

通过列表框中的选定项目更新文本框

问题描述:

在ASP.NET中,我有一个dropdown,其中有一些项目,我有buttontextbox。我订阅了下拉菜单的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 

现在我的问题是,当你点击它(按钮)第一次,动作获取与更新在列表框中选择当前动作,但是当你再次单击该按钮时没有更改列表框中的任何内容,文本框显示文本框中的第零项(似乎重置),尽管它实际上并未在所有。

我猜这可能与按钮点击引起的回发有关,这会重置全局状态或某些内容,但我不确定。为什么当下拉框仍然是我第一次设置时它被重置?

有人可以帮忙吗?

如果这不清楚,请留下评论什么是不明确的。谢谢!

+0

你有没有在Page_Load事件中运行的任何代码?您是否尝试在click事件中运行带有断点的调试器,以查看myclass.getAction在第二次调用中返回的内容? – 2011-03-11 23:07:05

+0

@Zach我真的很想调试它,但我不能。项目在远程计算机上... – 2011-03-11 23:13:50

+0

使用值加载所有下拉框的函数位于页面加载函数中...也许这是导致问题的原因? – 2011-03-11 23:14:24

第二次(当您单击按钮但不选择列表中的任何内容时),SelectedIndexChanged事件不会被引发(因为您没有更改所选索引)。

您需要确保按钮处理程序中的逻辑还可以为当前选定的下拉列表的索引获取适当的操作。 p_two_action似乎正在重置 - 当你说它是一个全球性的,你是如何实现它的?

+1

同意。将所有的逻辑放在按钮处理程序中可能会更好;无需在下拉菜单的selectedindexchanged事件中执行操作。 – 2011-03-11 23:28:02