我的网页代码隐藏是
public partial class _Default : System.Web.UI.Page
{
BLMethods objBLMethods = new BLMethods();
protected void Page_Load(object sender, EventArgs e)
{
objBLMethods.DisplayValue();
}
public void BindTextbox(string s)
{
TextBox1.Text=s;
}
}
我有一个类BlMethods
public class BLMethods
{
public void DisplayValue()
{
BindTextbox("This is from Bl Class");
}
}
这是生成错误,BindTextBox方法在页面中,除非创建了一个对象,否则无法从另一个类访问。
是否有机会在没有(创建对象页面或使方法静态)的情况下调用页面方法
答案 0 :(得分:2)
简短的回答是"否"。但是你可以通过其他方式达到同样的效果。
一种方法是让你的页面实现一个包含方法BindTextBox
的接口,并将该接口类型的参数传递给你的类,作为构造函数参数或方法参数。
另一种方法是让你的对象引发一个你的页面可以处理的事件。
最后,您可以让您的类方法接受具有BindTextBox
签名的委托参数(例如Action<string>
)并在您的类中调用委托。
我确定还有其他方法。
答案 1 :(得分:2)
将委托传递给实例。
public class BLMethods
{
readonly Action<string> _displayValue;
public BLMethods(Action<string> displayValue)
{
_displayValue = displayValue;
}
public void DisplayValue()
{
_displayValue("This is from Bl Class");
}
}
然后新建这样的实例。
objBLMethods = new BLMethods(s => BindTextbox(s));
答案 2 :(得分:1)
您可以将BLMethods
的构造函数添加到_Default
并将其分配到BLMethods
中的字段:
private _Default def;
public BLMethods(_Default def)
{
this.def = def;
}
并在_Default
中添加一个构造函数来实例化它:
public _Default()
{
this.objBLMethods = new BLMethods(this);
}
但说实话,我认为你需要认真思考你对问题的分离。尝试将您的应用程序分成不同的层。