我调查了IAsyncResultFilter
并使用OnResultExecutionAsync
方法查看context.Result.Model
,但不幸的是,如果context.Result.Model
为空,则无法使用{{1}}我要判断它是否为null,因为没有为视图声明模型,或者因为没有声明一个模型,因为没有模型传递给视图。
由于Razor View在执行之前被编译了,似乎应该有渲染管道的某个阶段,在那里可以与那个结果类进行交互,并且我可以从那个类中得到我需要的信息?但是如何?
如何以编程方式判断视图是否已声明模型,模型类型是什么以及模型对于当前视图呈现是否为空?
正如Chris Pratt在评论中指出的那样,理解这样一个问题的动机可能会有所帮助。所以这是背景故事:
一般来说,我正在处理的Web应用程序有两种类型的视图。 1)具有视图模型并通过控制器中指定的基于属性的路由路由到的视图和2)没有声明视图模型并且由默认路由器处理的默认路由路由到的视图它根据请求中指定的url路径查找视图。
这种方法在大多数情况下都很有效,但是如果我有一个需要模型的视图,并且我在基于属性的路由中有拼写错误或忘记在相关控制器中完全指定它,那么默认控制器将启动并尝试使用null模型提供该视图。这会导致剃刀页面抛出一个通用的空引用异常,并且我想增强该错误消息,以便它提供有关情况的更好信息。即视图需要模型但模型为null。因此,如果我能够检测到这种情况,我可以抛出更详细的异常,这有助于更快地识别问题。