我在 .aspx 页面上有一个文本框。在此页面上有一个用户控件。在此用户控件内部有一个按钮。我想在按钮单击时获取不在用户控件内部的文本框的值。如何我这样做
请帮我 。
在用户控件的按钮单击事件中写下这一行
protected void Button_Click(sender obj,EventArgs arg)
{
TextBox txtbox= (((MyPage)parent).FindControl("TextBoxid") as TextBox);
if(txtbox!=null)
(((MyPage)this.Page).FindControl("TextBoxid") as TextBox).Text;
//or
//(((MyPage)this.Parent).FindControl("TextBoxid") as TextBox).Text;
}
或者
替代方法是在您的页面中创建属性并在您的用户控件中访问它
public string txtValue
{
get
{
return TextboxID.Text;
}
}
在用户控件的按钮单击事件中
protected void Button_Click(sender obj,EventArgs arg)
{
string txtvalue = ((Mypage)this.Page).txtValue;
//or
//((MyPage)this.Parent).txtValue;
}
尝试使用以下方法,
((TextBox)USerControl.Parent.FindControl("txtbox")).Text
考虑到解耦,我建议如果您的用户控件需要访问它之外的信息,那么应该传入该信息,反之亦然。控件不应该对信息的来源负责,它只知道有信息。考虑到这一点,我建议冒泡事件以获取所需的信息。
这将涉及创建一个新的委托,然后Button
在单击它后触发它,从而使事件冒泡并允许我们返回所需的值,在本例中是文本框的值。
// declare a delegate
public delegate string MyEventHandler(object sender, EventArgs e);
// update the user control
public class MyUserControl : UserControl
{
// add the delegate property to your user control
public event MyEventHandler OnSomeButtonPressed;
// trigger the event when the button is pressed
protected void MyButton_Click(object sender, EventArgs e)
{
string someString = string.Empty;
if (this.OnSomeButtonPressed != null)
{
someString = this.OnSomeButtonPressed(this, e);
}
// do something with the string
}
}
// be sure to register the event in the page!
public class MyPage : Page
{
protected override void OnLoad(object sender, EventArgs e)
{
base.OnLoad(sender, e);
myUserControl.OnSomeButtonPressed += this.HandleUserControl_ButtonClick;
}
public string HandleUserControl_ButtonClick(object sender, EventArgs e)
{
return this.SomeTextBox.Text;
}
}
((TextBox)USerControl.Page.FindControl("txtbox")).Text
或者
((YourPageType)USerControl.Page).TextBox.Text
protected void MyButton_Click(object sender, EventArgs e)
{
string TextBoxValue;
TextBoxValue = MyTextBox.Text;
}
是你想要的吗?