C# 母版页需要来自从System.Web.UI.Page派生的抽象泛型类的属性
我有两个派生自抽象泛型类的类,该类派生自System.Web.UI.Page。我有一个System.Web.UI.MasterPage,它可能是也可能不是我的两个派生页面类或System.Web.UI.page的母版 问题是泛型类有一个我需要在母版页中访问的属性,但我不知道任何优雅的方法来获取它 这里有一个例子 内容类型:C# 母版页需要来自从System.Web.UI.Page派生的抽象泛型类的属性,c#,asp.net,.net,C#,Asp.net,.net,我有两个派生自抽象泛型类的类,该类派生自System.Web.UI.Page。我有一个System.Web.UI.MasterPage,它可能是也可能不是我的两个派生页面类或System.Web.UI.page的母版 问题是泛型类有一个我需要在母版页中访问的属性,但我不知道任何优雅的方法来获取它 这里有一个例子 内容类型: public abstract class Fruit { public int ID { get; set; } //Just an identifier } p
public abstract class Fruit
{
public int ID { get; set; } //Just an identifier
}
public class Apple : Fruit { }
public class Banana : Fruit { }
页码:
public abstract class FruitPage<T> : System.Web.UI.Page where T : Fruit
{
public T MyFruit { get; set; }
}
public class ApplePage : FruitPage<Apple> { }
public class BananaPage : FruitPage<Banana> { }
公共抽象类FruitPage:System.Web.UI.Page其中T:Fruit
{
公共T MyFruit{get;set;}
}
公共类ApplePage:FruitPage{}
公共类BananaPage:FruitPage{}
大师:
public partial class FoodMaster : System.Web.UI.MasterPage
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.Page is FruitPage<Fruit>) //I know this is wrong
{
if ((this.Page as FruitPage<Fruit>).MyFruit.ID <= 0) //This too
{
/*
I want to get here (this.Page being an ApplePage or BananaPage).
Basically... if ID<=0 then it is a new (unsaved) "fruit",
and I need to change some MasterPage GUI accordingly.
*/
}
}
}
}
public分部类FoodMaster:System.Web.UI.MasterPage
{
受保护的覆盖无效加载(事件参数e)
{
基础荷载(e);
如果(this.Page是水果页)//我知道这是错的
{
if((此.Page为果页).MyFruit.ID
您在FoodMaster
中放置的代码实际上属于FrootPage…这样您就不会有这个问题。它在任何其他情况下都不适用。我也考虑过这一点,但我可能应该提到这一点,我使用的是嵌套的Master。FoodMaster
实际上是“父级”当然,比如说FoodFruitMaster
。我想在FoodMaster
中添加一个方法并从页面调用该方法,但它必须在FoodFruitMaster
中冒泡出来。我认为这是草率的。“一个协变界面,基本上允许从foultpage
到foultpage
进行强制转换。”这是票,谢谢!
public class FruitPage : System.Web.UI.Page {
public Fruit MyInnerFruit { get; protected set; }
}
public abstract class FruitPage<T> : FruitPage where T : Fruit
{
public T MyFruit {
get { return (T)MyInnerFruit; }
set { MyInnerFruit = value; }
}
}
public partial class FoodMaster : System.Web.UI.MasterPage {
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
var fruitPage = this.Page as FruitPage;
if (fruitPage != null && fruitPage.MyInnerFruit.ID <= 0) {
...
}
}
}
public interface IFruitPage<out T> where T : Fruit {
public T MyFruit { get; }
}
public class FruitPage<T> : Page, IFruitPage<T> where T : Fruit {
public T MyFruit { get; set; }
}
public class FoodMaster : MasterPage {
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
var fruitPage = this.Page as IFruitPage<Fruit>;
if (fruitPage != null && fruitPage.MyFruit.ID <= 0) {
...
}
}
}