C# 从类文件调用page方法

C# 从类文件调用page方法,c#,asp.net,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(strin

我的页面代码隐藏是

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;
    }
}
我有一个班

public class BLMethods
{
    public void DisplayValue()
    {
       BindTextbox("This is from Bl Class");
    }
}
这是生成错误,BindTextBox方法位于页面中,除非创建对象,否则无法从其他类访问该页面


有没有可能在不创建页面对象或使方法静态的情况下调用页面方法?简短的回答是没有。但是,您可以通过其他方式实现相同的效果

一种方法是让页面实现一个包含方法BindTextBox的接口,并将该接口类型的参数作为构造函数参数或方法参数传递给类

另一种方法是让您的对象引发一个事件,您的页面可以处理该事件

最后,您可以让类方法接受具有BindTextBox签名的委托参数,例如Action,并在类中调用委托


我确信还有其他方法。

将委托传递给实例

public class BLMethods
{
    readonly Action<string> _displayValue;

    public BLMethods(Action<string> displayValue)
    {
        _displayValue = displayValue;
    }

    public void DisplayValue()
    {
       _displayValue("This is from Bl Class");
    }
}

您可以向BLMethods添加构造函数,该构造函数采用默认值并将其分配给BLMethods中的字段:

在默认情况下,添加一个构造函数来实例化它:

public _Default()
{
    this.objBLMethods = new BLMethods(this);
}

但老实说,我认为你需要认真考虑你的关注点分离。尝试将应用程序分成不同的层。

您昨天问过这个问题吗?在上一篇文章中,你有非常合适的答案,为什么还要重复这个问题呢?我的公司要求我用不同的方式来回答。昨天的答案没有让我的团队领导满意。你觉得这很难的原因是你不应该这样做。让前端代码处理前端,而只在后端处理逻辑。昨天被愚弄了。@PavanKumar-所以来这里不是为了满足你老板的要求。您的技术问题已经得到回答,不要重复。
private _Default def;
public BLMethods(_Default def)
{
    this.def = def;
}
public _Default()
{
    this.objBLMethods = new BLMethods(this);
}