从类文件调用页面方法

时间:2014-09-02 10:54:45

标签: c# asp.net

我的网页代码隐藏是

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方法在页面中,除非创建了一个对象,否则无法从另一个类访问。

是否有机会在没有(创建对象页面或使方法静态)的情况下调用页面方法

3 个答案:

答案 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);
}

但说实话,我认为你需要认真思考你对问题的分离。尝试将您的应用程序分成不同的层。