1

在 C# 中,我想直接从页面访问文本框,而不将其作为变量发送给类,例如

文件 class.cs 代码

public class A {
    private string dosomething {
        string text;
        text = textbox1.text; 
        // textbox1 exists in, for example, default.aspx, and I need it's 
        // value in the class after some event occurred - let's say there 
        // is button and it was clicked 
    return text;
    }
}

default.aspx.cs 代码

protected void Button1_Click(object sender, EventArgs e) {
    A a = new A(); 
    // I need when this button clicked to fill the variable within
    // the class with the data given from the textbox within this page
}

这是我想出的,但我不确定我是否以这种方式使用 getter 和 setter 走正确的道路:

private TextBox TextBox1 = new TextBox();
public string  settext {
    get { return TextBox1.Text; }
    set { TextBox1.Text = value;}
}

但我总是收到一条NullReferenceException was unhandled消息。

4

2 回答 2

3

将其添加到构造函数

A a = new A(this.TextBox1.Text);

public class A
{
    private String _Text;

    public A(String text){

       this._Text = text;
    }

}

私有 _Text 变量只能由类在内部访问,但是如果您更改为public属性,则可以在创建实例后访问它

A a = new A(this.TextBox1.Text);
String text = a._Text;

除此之外,如果它是一个公共变量,那么您只需创建实例并设置 _Text 并且不需要public A(String text)构造函数:

A a = new A();
a._Text = this.TextBox1.Text;
String seeIfSet = a._Text;
于 2012-12-05T17:29:34.980 回答
0

我找到了我正在寻找的东西,它的工作方式就像魅力 一样/asp-net-2-0-master-pages-changes-the-pages-control-hierarchy-level-300/ 如果在没有母版页的情况下使用母版页相同的想法在我的情况下我正在使用母版页并且我对其进行了测试无论有无工作都很好

    private TextBox  gettextbox ( )
    {

        //without master page
           /*System.Web.UI.Page Default = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
             TextBox TextBox1 = (TextBox)Default[0].FindControl("TextBox1");*/

        //with master page
       System.Web.UI.Page Default = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
   ContentPlaceHolder cph = Default.Controls[0].FindControl("ContentPlaceHolder1") as ContentPlaceHolder;
           TextBox Textbox1 = (TextBox)cph.FindControl("TextBox1");
           return Textbox1;
    }
于 2012-12-06T11:45:55.817 回答