这是其中一个似乎应该有一个简单解决方案的问题,但我无法弄清楚它是什么!
如果第一个子节点实际上没有调用第二个子节点,如何将控件从一个子节点传递到另一个子节点?例如,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
我知道这是一个愚蠢的例子 - 相信我,当我说我想要的真正的应用程序实际上是有道理的!但重点是我想以某种方式存储控件的名称,以便在第二个子运行时由第一个子更新。
如果我从第二个调用第一个子元素就很容易,我只是将它作为一个参数传递,但我不是。第一个子按钮是从按钮单击调用的,它是第二个子动作的独立动作。
我似乎无法使用会话变量(我的第一个想法),因为我找不到任何方法将控件名称存储为字符串,然后在第一个子句时将其转换回实际控件运行。如果有人能告诉我怎么做,这将是最简单的答案。
答案 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