当前位置:  开发笔记 > 编程语言 > 正文

外部ASP.NET MVC 3区域不在运行时编译(在预览1中工作但不在RC中工作)

如何解决《外部ASP.NETMVC3区域不在运行时编译(在预览1中工作但不在RC中工作)》经验,为你挑选了2个好方法。

问题

ASP.NET MVC 3 RC在运行时(浏览时)向外部MVC区域发出编译错误.网站本身有效,但插件拒绝加载抛出与未知模型有关的编译问题.

LogOn.cshtml

@model TestProject.Models.LogOnModel
@{
    View.Title = "Log On";
}
//.....omitted for brevity

运行时抛出错误.

Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS0103: The name 'model' does not exist in the current context

Source Error:


Line 38:         public override void Execute() {
Line 39: 
Line 40: Write(model);
Line 41: 
Line 42: WriteLiteral(" TestPlugin.Models.LogOnModel\r\n");

背景

该网站是我刚刚迁移到ASP.NET MVC 3 RC的ASP.NET MVC 3 Preview 1网站.我阅读了发行说明并进行了相应更新,但仍然遇到了WebMatrix的问题.我找到了一个SO问题,来自MVC团队的人建议,直到RTM,我们使用以下命令强制命名空间被引入(我把它们放在web.config中但它不起作用).

namespace WebMatrix.Data { class Foo { } }
namespace WebMatrix.WebData { class Foo { } }

这解决了我在网站内的问题,网站现在在MVC 3 RC中正常加载.然而,问题是外部MVC区域(单独的组装).

注意我没有使用任何第三方库,我写了一个小插件框架,允许从另一个程序集加载MVC区域.视图被编译为嵌入式资源.

所以我有一个身份验证插件,例如看起来像.

-Controllers
-- AccountController.cs
-Models
-- AccountModels.cs
-Views
--Account
--- LogOn.cshtml
--- ChangePassword.cshtml
--- ...
-Web.config
AccountAreaRegistration.cs
Web.config

除了将视图标记为嵌入资源这一事实之外,AccountController还扩展了一个知道如何加载嵌入式资源和删除了global.asax的PluginController,它是一个非常标准的MVC区域.

我尝试创建一个新的空MVC 3测试插件项目,然后慢慢添加相关代码.这可以确保所有引用和web.configs都正确.但我仍然收到上述相同的型号问题.该项目在设计时编译,但在尝试发出它看起来的视图时会在运行时抛出一个编译问题.

为了清楚起见,这一切在ASP.NET MVC 3 Preview 1中运行良好.但是,现在我已将其升级到MVC 3 RC我的核心网站正在运行,但外部区域拒绝工作.

插件框架本身没有任何问题.它在MVC 3 Preview 1中运行良好.我正在寻找可能对MVC 3 RC中可能出现的内容有所了解的答案,以及为什么我可能会使用接收此模型错误.

有任何想法吗?

更新

有趣的是,如果我将视图顶部的模型声明更改为预览1语法`@inherits System.Web.Mvc.WebViewPage

我得到一个不同的运行时编译错误.这次我在登录表单的Html.ValidationSummary开始时进一步向下发生错误.

@inherits System.Web.Mvc.WebViewPage
@{
    View.Title = "Log On";
}

VastID Login

@Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.") // <=== Compilation issue here on Html.ValidationSummary @using (Html.BeginForm()) { // .. omitted for brevity }
Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS1061: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'ValidationSummary' and no extension method 'ValidationSummary' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?)

Source Error:


Line 49: 
Line 50: 
Line 51:    Write(Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again."));
Line 52: 
Line 53: WriteLiteral("\r\n");

有趣的是没有编译时错误.System.Web.WebPages,System.Web.Helpers和所有必需的MVC 3 RC dll都存在.包括必要的web.config.就好像这些在尝试加载视图时不可用.

我相信实际的剃刀语法是System.Web.WebPages的一部分?Html.ValidationSummary在哪里?System.Web.Mvc或System.Web.Helpers?



1> Joshua Hayes..:

我实际上发现我的/ Plugins文件夹中缺少ASP.NET MVC 3 RC web.config.这是一个空文件夹,而不是必须为插件虚拟路径提供程序提供的web.config.这是缺失的环节.

基本上会发生的是你有一个扩展的控制器PluginController.这个控制器改变了视图的路径,并附加了"插件"和程序集名称(记住我们在这里处理嵌入式视图).所以你最终得到类似的东西

/Plugins/TestProject.dll/TestProject.Views.Account.LogOn.cshtml

然后,虚拟路径提供程序和集合类负责从插件资源清单中查找并返回此视图.

让我真正难过的是预览1和Beta之间的重大变化,他们添加了一个_ViewStart.cshtml.当从插件请求诸如Logon.cshtml之类的视图时,框架的内部请求正在为该组件中不存在的_ViewStart文件进行.由于此时执行已经在虚拟路径提供程序中,我无法从网站返回_ViewStart.cshtml.所以我在插件中添加了一个.

我不得不对PluginVirtualFile.cs和PluginProvider.cs进行更改.所以我最终完成了所有工作.

非常感谢@Eilon的帮助.虽然它没有得到答案,但非常感谢.


如果您能够更详细地解释如何解决这个问题,那将是一个很大的帮助.我有同样的问题.我将_ViewStart.cshtml添加到我的外部插件项目中,并且我得到了新的错误,具体取决于我在ViewStart文件中放置的内容.我得到的第一个错误是它无法将我的_ViewStart.cshtml转换为'System.Web.WebPages.StartPage'类型.任何帮助将不胜感激!谢谢!

2> Eilon..:

看起来你的CSHTML文件正在被编译,好像没有@model关键字,并且它实际上认为你想要渲染一个名为的变量model.

如果您的CSHTML文件位于Views包含特殊web.config且具有MVC特定Razor设置的文件夹下,那么它应该知道这@model是一个关键字而不是正在呈现的变量.请检查您的~/Views/web.config文件,确保它具有MVC Razor主机的部分和正确的设置.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有