在我的ViewStart文件中,我需要根据渲染视图的控制器类型来渲染不同的布局。
我需要确定一个控制器,在最底层是否衍生自VehicleController。
所以,假设我有一个这样的继承模型。
CarController: VehicleController
FordController: CarController
FordFocusController: FordController
现在,在FordFocusController中,我有一个简单的Index()方法,返回一个视图。
所以在ViewStart中,我可以这样确定控制器。
ViewContext.Controller.GetType().BaseType // returns FordController - correct!
现在,对于FordFocusController来说,这将返回FordController。
然而,我如何判断这是否是VehicleController的一种类型,在这种情况下,它是最低级别的?
例如,我不想做这样的事情,因为它不是动态的。
ViewContext.Controller.GetType().BaseType.GetType().BaseType.GetType()
谢谢你
在C#中,有关键字'是'来实现。
你可以把它当作
if (ViewContext.Controller is VehicleController)
{
...
}
在您的继承结构中
CarController: VehicleController
FordController: CarController
FordFocusController: FordController
可以有这些例子。
var cc = new VehicleController();
var fc = new FordController();
var ffc = new FordFocusController();
var direct = (fc is VehicleController); // true, a ford controller is also a vehicle controller
var indirect = (ffc is VehicleController); // true, a ford focus controller is also a vehicle controller
//cast it to a variable
if (ffc is VehicleController myVehicleController)
{
....here you can use myVehicleController of type VehicleController
}
问候。
迈克