Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Razor 通过编程告诉视图是否声明了模型、模型类型以及其是否为null_Razor_Asp.net Core_Razorengine - Fatal编程技术网

Razor 通过编程告诉视图是否声明了模型、模型类型以及其是否为null

Razor 通过编程告诉视图是否声明了模型、模型类型以及其是否为null,razor,asp.net-core,razorengine,Razor,Asp.net Core,Razorengine,我使用IAsyncResultFilter进行了调查,并使用它的OnResultExecutionAsync方法查看context.Result.Model,但不幸的是,如果context.Result.Model为空,我无法判断它是否为空,因为没有为视图声明模型,或者即使有一个模型声明为null,因为没有向视图传递任何模型 因为Razor视图get在执行之前就已经编译好了,所以似乎应该在渲染管道的某个阶段与结果类进行交互,在那里我也许可以从该类获得所需的信息?但是怎么做呢 如何以编程方式告诉视

我使用
IAsyncResultFilter
进行了调查,并使用它的
OnResultExecutionAsync
方法查看
context.Result.Model
,但不幸的是,如果
context.Result.Model
为空,我无法判断它是否为空,因为没有为视图声明模型,或者即使有一个模型声明为null,因为没有向视图传递任何模型

因为Razor视图get在执行之前就已经编译好了,所以似乎应该在渲染管道的某个阶段与结果类进行交互,在那里我也许可以从该类获得所需的信息?但是怎么做呢

如何以编程方式告诉视图是否声明了模型,模型类型是什么,以及对于视图的当前呈现,模型是否为null

正如克里斯·普拉特(Chris Pratt)在评论中指出的那样,理解这样一个问题的动机可能会有所帮助。下面是背景故事:

一般来说,我正在处理的web应用程序有两种类型的视图。1) 具有视图模型且通过控制器中指定的基于属性的路由路由到的视图,以及2)未声明视图模型且通过默认路由路由到的视图,默认路由由默认控制器处理,默认控制器根据请求中指定的url路径查找视图


这种方法在大多数情况下都很有效,但是如果我有一个视图需要一个模型,并且我在基于属性的路由中有一个输入错误,或者忘记在相关的控制器中完全指定它,那么默认控制器将启动并尝试为该视图提供服务,但是使用一个空模型。这会导致razor页面抛出一个通用的空引用异常,我希望增强该错误消息,以便它提供有关该情况的更好信息。也就是说,视图需要一个模型,但该模型为空。因此,如果我能检测到这种情况,我可以抛出一个更详细的异常,这将有助于更快地识别问题。

这是一个问题。你真正想要实现的是什么?你为什么认为你需要这些信息?你想干什么?也许有更好的方法。克里斯,我必须在这里查找XY问题:知道那个是什么。让我笑了,我想你是对的。我将补充我的问题,以解释我试图解决的根本问题。如果您的视图需要一个模型,但该模型为空,为什么不在您的视图中检查该模型,并在该点抛出一个有意义的错误?@mason-这当然行得通,我从该方法开始。但是我的web应用程序有数百个视图,我很快意识到我不想将相同的代码粘贴到所有视图中。我想要一个全局解决方案,其中代码可以放在一个地方。显而易见的解决方案是:不要在没有模型的情况下编写视图-始终传递模型。使用包含错误时要显示的基本信息的基本视图模型,所有视图模型都从该模型继承。