2 つのマスター ページを使用するアプリケーションがあります。1 つはメイン ページ用、もう 1 つはポップアップ ページ用です。これらは両方ともマスターページから継承します
public partial class MainMasterPage : System.Web.UI.MasterPage
{
UserBO objUser = null;
public UserBO GetCurrentUser()
{
UserBO userBO = new UserBO();
.....
.....
return userBO;
}
}
public partial class PopupMasterPage : System.Web.UI.MasterPage
{
UserBO objUser = null;
public UserBO GetCurrentUser()
{
UserBO userBO = new UserBO();
.....
.....
return userBO;
}
}
ここまでは順調ですね。だから私のコンテンツページはすべて基本クラスから継承します。基本クラスには、基本クラスから GetCurrentUser を呼び出すメソッドがあります。
public class BasePage : Page
{
//.....
protected UserBO GetCurrentUserFromMasterPage()
{
this.Master
Elsa.MasterPages.MainMasterPage master = (Elsa.MasterPages.MainMasterPage )this.Master;
return master.GetCurrentUser();
}
}
ここで、ベース ページが をキャストしてMasterPage
から を呼び出すことがわかりますGetCurrentUser
。
背景として...マスターページは現在のユーザーがシステムにログインし、情報を使用して自分自身を描画します。ユーザーがセッションに参加している場合は、それを取得します。それ以外の場合は、データベースからロードします。コンテンツ ページに同じことをさせたくないので、ベース ページが常にマスターからコンテンツ ページの現在のユーザーを取得するようにしました。
ただし、私の問題は、2 つのマスター ページがあり、すべての Web ページがベース ページから派生しているためです。正しいマスターにキャストできる必要があります。
public partial class MyMainPage : Elsa.Pages.BasePage
{
private long _userId = -1;
public partial class MyPopupPage : Elsa.Pages.BasePage
{
private long _userId = -1;
MasterType ディレクティブを挿入すると、正しいマスターのコンテンツ ページでメソッドを呼び出すことができます。しかし、共通のメソッドとしてコンテンツから呼び出したくないので、ベースで必要です。
誰でもこれを処理する方法を知っています。PopupBasePage の BasePage を再度派生GetCurrentUserFromMasterPage()
させ、ポップアップ マスターにキャストするように上書きすることを考えていました。または、何にキャストするかを伝えるために、BasePage コンストラクターに何かを渡しますか。
多くの Web ページがあるため、すべての Web ページへの影響を最小限に抑えたいと考えています。
ありがとうM