ASP.NET将控件公开给其他类

8bi*_*cat 2 c# asp.net

我一直在争夺这个问题,我需要一些指导.

我在ASP.NET 4.0 WEBFORMS中编码.

问题是:如何将文本框,标签或任何其他控件公开给另一个类.

我有一个webform(见下文).

public partial class WebForm1 : System.Web.UI.Page
{

}
Run Code Online (Sandbox Code Playgroud)

然后引用它并将其发送到另一个类.

public class SearchInitializer
{
    private WebForm1 _webform1;

    public SearchInitializer(WebForm1 Webform1)
    {
        _webform1 = Webform1;
    }

    public void ChewSettings()
    {

        _webform1 //can't find any control in here?!
    }

}
Run Code Online (Sandbox Code Playgroud)

首先,我想到创建一个公共属性,我认为我可以从我发送到新类的引用访问..但是没有!

public partial class WebForm1 : System.Web.UI.Page
{
   public string KeywordBox1 
    {
        get {return txt_keyword.Text;}
        set {txt_keyword.Text = value;}
    }

}
Run Code Online (Sandbox Code Playgroud)

我试图将Webform继承到另一个类中.使该物业可用但没有运气.

public class SearchInitializer : Webform1
{
    private WebForm1 _webform1;

    public SearchInitializer(WebForm1 Webform1)
    {
        _webform1 = Webform1;
    }

    public void ChewSettings()
    {

        _webform1 //can't find any control in here?!
    }

}
Run Code Online (Sandbox Code Playgroud)

好吧,一个抽象类migth在这里有用,继承了一切.但我认为我错了.我有事件和静态类,所以他们可以与页面交谈.但我真的不想使用静态类作为容器来保存控件中的所有信息.所以这些是我尝试过的例子,但都失败了.所以这是我基本上试图扩展我所知道的;)感谢阅读!! 为什么他们失败了,我该怎么做?

根据要求编辑!

public partial class WebForm1 : System.Web.UI.Page
{

     protected void btn_click(object sender, EventArgs e)
     {
         SearchInitializer searchIni = new SearchInitializer(this);
     }

}
Run Code Online (Sandbox Code Playgroud)

Joe*_*ton 5

要公开控件,我可以考虑使用两种方法.

您可以从myPage.designer.cs文件中删除以下语句,并将其作为公共声明放在您的代码中:

protected global::System.Web.UI.WebControls.TextBox myTextBox;
Run Code Online (Sandbox Code Playgroud)

public System.Web.UI.WebControls.TextBox myTextBox;
Run Code Online (Sandbox Code Playgroud)

这应该可以立即访问.我首选的方法是为要提供访问权限的每个特定控件添加属性.

public System.Web.UI.WebControls.TextBox MyTextBoxElement
{
    get
    {
        return myTextBox;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您需要它们或其他条件,这允许提供补充访问控制.在任何情况下,要访问字段或属性,使用对象必须通过您的特定页面类型引用它.