文本框值未在 asp.net c# 中访问

本文关键字:net 访问 asp 文本 | 更新日期: 2023-09-27 18:36:20

我在.aspx页面上有一个文本框。在此页面上有一个 用户控件 .在此用户控制中有一个 按钮 .我想要在按钮单击时获取文本框的值,该值不在用户控件内。我该怎么做

请帮助我.

文本框值未在 asp.net c# 中访问

用户控件的按钮单击事件中写下此行

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;
}
protected void MyButton_Click(object sender, EventArgs e)
{
  string TextBoxValue;
  TextBoxValue = MyTextBox.Text;
}

这是你想要的吗?

尝试使用以下方法,

((TextBox)USerControl.Parent.FindControl("txtbox")).Text
((TextBox)USerControl.Page.FindControl("txtbox")).Text

((YourPageType)USerControl.Page).TextBox.Text

考虑到解耦,我建议,如果您的用户控件需要访问它外部的信息,则应传入该信息,反之亦然。控件不应该负责信息的来源,它只知道有信息。考虑到这一点,我建议冒泡活动以获取所需的信息。

事件冒泡

这将涉及创建一个新委托,然后在单击Button后触发它,从而冒泡事件并允许我们返回所需的值,在本例中为文本框值。

步骤 1:声明委托

// declare a delegate
public delegate string MyEventHandler(object sender, EventArgs e);

步骤 2:更新用户控件

// 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
    }    
}

第 3 步:更新页面

// 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;
    }
}