我创建了自己的CustomController基类,它继承自Controller。 同样,我创建了自己的ViewViewData,它继承自ViewDataDictionary。 CustomController类有一个ctor,它接受CustomViewData作为参数。
我的所有控制器都继承自CustomController并传入其继承的CustomViewData。 现在我希望能够从我的控制器中调用this.ViewData并获取我在控制器中传递的视图数据。目前我得到一个ViewDataDictionary(来自Controller类)。所以我丢失了我的类型信息。
如何在我的CustomController派生类中保留我的ViewData属性的类型信息,而不将其包装在为我做拳击的get / set中?
答案 0 :(得分:1)
ViewData属性在ControllerBase类中定义,您无法覆盖它,但您可以这样做:
public class CustomController : Controller {
public new CustomViewData ViewData { get; set; }
}
但是要注意,如果你像这样访问一个CustomController实例
Controller c = myCustomControllerInstance;
CustomViewData cvd = c.ViewData;
您的代码将无法编译,因为您将使用ViewData属性的默认实现,它将返回一个ViewDataDictionary实例。
答案 1 :(得分:0)
我尝试了几种方法来实现我的目标,但除了我知道存在的这个丑陋的解决方案之外,似乎没有任何方法可行。但是......好吧,丑陋。
我基本上将装箱/拆箱包装在一个get / set中。我必须在整个课程链中这样做。所以我的CommonController使用CommonViewData实例,我的AbcController:CommonController从AbcViewData执行此操作:CommonViewData到CommonViewData等。
直到我找到一个更好的解决方案,我将不得不这样做。
public new AbcViewData ViewData {
get { return base.ViewData as [bcViewData; }
set { base.ViewData = value; }
}