我一直试图找到这个问题的好答案,但似乎找不到一个。我有一个源自基页的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
如果我将我的功能公开而不是受保护,这是有效的。这样做似乎不是解决此解决方案的非常OOP方式,所以如果有人能为我提供更好的解决方案,我会很感激!
答案 0 :(得分:1)
TimeClock继承自UserControl,而不是来自MyBasePage,那么为什么TimeClock会看到Method GetLoginTime()?
答案 1 :(得分: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]...
}
}
答案 2 :(得分:0)
(this.Page as BasePage).MethodName()