在扩展控制器中更改ViewData的类型 - c#

我创建了自己的CustomController基类,该基类继承自Controller。
同样,我创建了自己的CustomViewData,它继承自ViewDataDictionary。
CustomController类具有一个接受CustomViewData作为参数的ctor。

我所有的控制器都继承自CustomController并传递其继承的CustomViewData。
现在,我希望能够从控制器中调用this.ViewData并取回我在控制器中传递的视图数据。目前,我从Controller类中获得了ViewDataDictionary。因此我丢失了类型信息。

如何将我的类型信息保留在CustomController派生类的ViewData属性中,而不将其包装在为我装箱的get / set中?

c#参考方案

ViewData属性是在ControllerBase类中定义的,您不能覆盖它,但是您可以这样做:

public class CustomController : Controller {

    public new CustomViewData ViewData { get; set; }

}

但请注意,如果您这样访问CustomController实例

Controller c = myCustomControllerInstance;
CustomViewData cvd = c.ViewData;

您的代码将无法编译,因为您将使用ViewData属性的默认实现,并且它将返回ViewDataDictionary实例。

45码