C# ASP.Net MVC中错误模型的编译时错误

C# ASP.Net MVC中错误模型的编译时错误,c#,asp.net,asp.net-mvc,razor,C#,Asp.net,Asp.net Mvc,Razor,对于强类型视图,是否存在编译时错误。假设我在文件夹/Views/Home/Index.cshtml中有一个具有以下代码和强类型模型的视图: @model CSTemplate.Models.Home.HomeIndexModel @{ ViewBag.Title = "Index"; } <h2>Index</h2> 如您所见,由于View()接受对象作为模型,编译器不会抱怨模型无效,而是会输出一个运行时错误,即: Server Error in '/' A

对于强类型视图,是否存在编译时错误。假设我在文件夹
/Views/Home/Index.cshtml
中有一个具有以下代码和强类型模型的视图:

@model CSTemplate.Models.Home.HomeIndexModel

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
如您所见,由于View()接受对象作为模型,编译器不会抱怨模型无效,而是会输出一个运行时错误,即:

Server Error in '/' Application.

The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[System.String]', but this dictionary requires a model item of type 'CSTemplate.Models.Home.HomeIndexModel'.
在这种模型类型不匹配的情况下,是否有任何方法可以获得编译时错误而不是运行时错误,或者是否有任何解决方法?

返回视图应为返回的类型

CSTemplate.Models.Home.HomeIndexModel //this is the type model expecting
不是

List//这是您要返回到模型的类型

从我们在这个问题中的讨论来看,似乎没有针对这种情况的建议解决方法。由于视图将类型为
object
的模型作为参数,因此,如果您错误地传入了与视图的严格类型模型类型不同的模型,编译器不会抱怨。遗憾的是,如果您需要更改视图的严格类型模型的类型,编译器不会通知您以前的不一致模型被传递到视图,但这些错误只会在运行时发出通知。

我上传了一个nuget包来解决此问题,它会生成真正的强命名视图。
请在此处查看


是的,这是我的问题,如果视图返回的是
List
类型的内容,而不是真正严格类型的模型
CSTemplate.Models.Home.HomeIndexModel
,编译器不会抱怨和限制构建。项目生成成功,只出现运行时错误。您可以将匿名类型传递给视图并进行编译。是的,我的问题是,如果模型类型与视图中严格键入的模型类型不匹配,编译器会提出投诉。我认为您的案例已被证明是
而不是
。另一方面,如果要传递匿名类型,则使用强类型视图有什么意义?如果希望出现编译错误,
返回视图((CSTemplate.Models.Home.HomeIndexModel)s)
;作为一个想法——是否可能有自动测试来尝试调用每个操作,并且在抛出错误时失败?这不是编译错误,但如果编译后自动运行测试,则可以在编译后立即找到它。是的,这肯定是一个选项,对控制器操作进行某种形式的单元测试,以确保它们返回可接受的模型。如果已安装resharper,如果类型不匹配,它将通知您
CSTemplate.Models.Home.HomeIndexModel //this is the type model expecting
List<string> //this is the type you are returning to the model