如何将控制作为变量传递

时间:2013-03-27 12:06:25

标签: asp.net vb.net variables

这是其中一个似乎应该有一个简单解决方案的问题,但我无法弄清楚它是什么!

如果第一个子节点实际上没有调用第二个子节点,如何将控件从一个子节点传递到另一个子节点?例如,btnChangeText位于具有名为mpExample的ModalPopupExtender的面板中,因此通常不可见:

Protected Sub btnChangeText_Click(sender as object, e as EventArgs) Handles btnChangeText.Click

<SpecifiedTextBox>.Text = "Hello"

End Sub

然后在主页面上,始终可见,是与每个文本框关联的按钮。在这个例子中,它是textbox15:

Protected Sub btnChangeTextBox15_Click(sender as object, e as EventArgs) Handles btnChangeTextBox15.Click

<Set TextBox15 as variable>
mpExample.Show()

End Sub

我知道这是一个愚蠢的例子 - 相信我,当我说我想要的真正的应用程序实际上是有道理的!但重点是我想以某种方式存储控件的名称,以便在第二个子运行时由第一个子更新。

如果我从第二个调用第一个子元素就很容易,我只是将它作为一个参数传递,但我不是。第一个子按钮是从按钮单击调用的,它是第二个子动作的独立动作。

我似乎无法使用会话变量(我的第一个想法),因为我找不到任何方法将控件名称存储为字符串,然后在第一个子句时将其转换回实际控件运行。如果有人能告诉我怎么做,这将是最简单的答案。

1 个答案:

答案 0 :(得分:1)

一种方法是将控件的ID作为字符串存储在Session变量中,然后使用FindControl方法在第二次单击事件中获取控件。

Protected Sub btnChangeTextBox15_Click(sender as object, e as EventArgs) Handles btnChangeTextBox15.Click
    Session("currentTextBox") = TextBox15.ID
    mpExample.Show()
End Sub

Protected Sub btnChangeText_Click(sender as object, e as EventArgs) Handles btnChangeText.Click
    Dim currentTextBox As TextBox
    currentTextBox = CType(Page.FindControl(Session("currentTextBox")),TextBox)
    currentTextBox.Text = "Hello"
End Sub

请注意,如果TextBox15控件位于某种容器(Panel或其他)中,则需要使用该容器的FindControl方法,而不是Page.FindControl


另一种方法是将TextBox本身存储在Session变量中,然后将其拉出来设置其他方法中的文本。请注意,这仅适用于在同一请求中调用方法的情况(这听起来不像它对您的用例有效)。这就是看起来的样子:

Protected Sub btnChangeTextBox15_Click(sender as object, e as EventArgs) Handles btnChangeTextBox15.Click
    Session("currentTextBox") = TextBox15
    mpExample.Show()
End Sub

Protected Sub btnChangeText_Click(sender as object, e as EventArgs) Handles btnChangeText.Click
    Dim currentTextBox As TextBox
    currentTextBox = CType(Session("currentTextBox"), TextBox)
    currentTextBox.Text = "Hello"
End Sub