1

我一直试图找到这个问题的好答案,但似乎找不到。我有一个派生自基本页面的 ASP.NET 页面,如下所示:

public partial class MainPage : MyBasePage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var loginTime = GetLoginTime(); // This works fine
    }
}

和基本页面:

public partial class MyBasePage: Page
{
}

protected DateTime GetLoginTime()
{
    // Do stuff
    return loginTime;
}

现在我在该页面上有一个需要调用我的方法的用户控件......就像这样:

public partial class TimeClock : UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var loginTime = GetLoginTime(); // This does not work!
    }
}

如您所见,出于显而易见的原因,我无法调用我的基本方法。我的问题是,如何从我的用户控件中调用此方法?我发现的一种解决方法是这样的:

var page = Parent as MyBasePage;
page.GetLoginTime(); // This works IF I make GetLoginTime() a public method

如果我将我的功能公开而不是受保护,这将有效。这样做似乎不是解决此解决方案的一种非常面向对象的方法,因此如果有人可以为我提供更好的解决方案,我将不胜感激!

4

3 回答 3

1

TimeClock 继承自 UserControl,而不是 MyBasePage,那么 TimeClock 为什么要查看方法 GetLoginTime()?

于 2013-01-20T20:18:41.903 回答
1

你应该让你的 UserControl 远离你的页面。它应该在 OOP 中解耦。添加属性以设置值和委托以挂钩事件:

public partial class TimeClock : UserControl
{
    public DateTime LoginTime{ get; set; }

    public event UserControlActionHandler ActionEvent;
    public delegate void UserControlActionHandler (object sender, EventArgs e);

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void Button_Click(object sender, EventArgs e)
    {
       if (this.ActionEvent!= null)
       {
           this.ActionEvent(sender, e);
       }
    }

}

public partial class MainPage : MyBasePage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var loginTime = GetLoginTime();
        TimeClock1.LoginTime = loginTime;
        TimeClock1.ActionEvent += [tab][tab]...
    }
}
于 2013-01-20T20:33:26.340 回答
0

(this.Page as BasePage).MethodName()

于 2014-03-13T13:19:28.640 回答