在ViewStart文件中,我需要根据呈现视图的控制器类型来呈现不同的布局。
我需要确定最低级别的控制器是否来自VehicleController。
因此,假设我有一个这样的继承模型:
<div class="index-tops">
@foreach ($episodes as $date => $group)
<p>{{ $group->first()->created_at->format('jS F Y') }}</p>
@foreach ($group as $episode)
...
@endforeach
@endforeach
</div>
现在,在FordFocusController中,我有一个简单的Index()方法返回一个视图。
因此在ViewStart中,我可以像这样确定控制器:
CarController: VehicleController
FordController: CarController
FordFocusController: FordController
现在,对于FordFocusController,这将返回FordController。
但是,如何确定这是VehicleController类型,在这种情况下,它处于最低级别?
例如我不想做这样的事情,因为它不是动态的!
ViewContext.Controller.GetType().BaseType // returns FordController - correct!
谢谢
答案 0 :(得分:2)
在C#中,为此使用了关键字“ is”。
您可以将其用作
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
}
问候
迈克