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!
    }
}

ご覧のとおり、明らかな理由により、基本メソッドを呼び出すことができません。私の質問は、ユーザー コントロールからこのメソッドを呼び出すにはどうすればよいですか? 私が見つけた回避策の1つは次のようなものです:

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

関数を保護する代わりに公開すると、これは機能します。これを行うことは、このソリューションに取り組むための非常にOOPな方法のようには思えないので、誰かが私により良い解決策を提供できるなら、私はそれを感謝します!

4

3 に答える 3

1

UserControlをPageのものから遠ざける必要があります。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 に答える
1

TimeClockはMyBasePageからではなくUserControlを継承しているのに、なぜTimeClockはメソッドGetLoginTime()を参照する必要があるのでしょうか。

于 2013-01-20T20:18:41.903 に答える