我一直在争夺这个问题,我需要一些指导。
我在ASP.NET 4.0 WEBFORMS中编码。
问题是:如何将文本框,标签或任何其他控件公开给另一个类。
我有一个webform(见下文)。
public partial class WebForm1 : System.Web.UI.Page
{
}
然后引用它并将其发送到另一个类。
public class SearchInitializer
{
private WebForm1 _webform1;
public SearchInitializer(WebForm1 Webform1)
{
_webform1 = Webform1;
}
public void ChewSettings()
{
_webform1 //can't find any control in here?!
}
}
首先我想到创建一个公共属性,我认为我可以从我发送给新类的引用中访问它..但是没有!
public partial class WebForm1 : System.Web.UI.Page
{
public string KeywordBox1
{
get {return txt_keyword.Text;}
set {txt_keyword.Text = value;}
}
}
我试图将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?!
}
}
好的,抽象类migth在这里有用,继承了一切。但我认为我错了。我有事件和静态类,所以他们可以与页面交谈。但我真的不想使用静态类作为容器来保存控件中的所有信息。 所以这些是我尝试过的例子,但都失败了。所以这是我基本上试图扩展我所知道的;)感谢阅读!! 为什么他们失败了,我该怎么做?
按要求编辑!
public partial class WebForm1 : System.Web.UI.Page
{
protected void btn_click(object sender, EventArgs e)
{
SearchInitializer searchIni = new SearchInitializer(this);
}
}
答案 0 :(得分:5)
要公开控件,我可以想到两种可以使用的方法。
您可以从myPage.designer.cs
文件中删除以下语句,并将其作为公开声明放在您的代码中:
protected global::System.Web.UI.WebControls.TextBox myTextBox;
变为
public System.Web.UI.WebControls.TextBox myTextBox;
这应该可以立即访问。我首选的方法是为要提供访问权限的每个特定控件添加一个属性。
public System.Web.UI.WebControls.TextBox MyTextBoxElement
{
get
{
return myTextBox;
}
}
如果您需要它们或其他条件,这允许提供补充访问控制。在任何情况下,要访问字段或属性,使用对象必须通过您的特定页面类型引用它。
答案 1 :(得分:2)
不确定您要执行的操作,但要访问继承的calss中的base
类,您需要使用base
关键字,而不是声明其实例。
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
public string KeywordBox1
{
get { return txt_keyword.Text; }
set { txt_keyword.Text = value; }
}
}
public class SearchInitializer : WebForm1
{
public SearchInitializer()
{
}
public void ChewSettings()
{
// Works
base.KeywordBox1 = "Red";
}
}
如果intellisense未显示该属性,请尝试重建该解决方案。然后它将刷新可用属性列表,它应显示。
答案 2 :(得分:2)
您的原始方法必须有效。我建议您使用带有文本框和SearchInitializer
类的表单创建一个小型测试项目,看看它是否有效,然后找出当前项目中的不同之处。