Проблема
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 Preview 1 I только что перешли на ASP.NET MVC 3 RC. Я прочитал примечания к выпуску и обновил их соответствующим образом, но все же столкнулся с проблемой с 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 расширяет PluginController, который знает, как загружать встроенные resouces и удаляемый global.asax, это довольно стандартная область 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<TestProject.Models.LogOnModel>
@{
View.Title = "Log On";
}
<div class="content_item half loginform">
<div class="content_body">
<h1>VastID Login</h1>
@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
}
</div>
</div>
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 и все необходимые библиотеки DLL MVC 3 RC присутствуют. Включая необходимые файлы web.config. Однако, как будто они недоступны, когда представление пытается загрузить.
Фактический синтаксис бритвы, который я считаю частью System.Web.WebPages? Где живет Html.ValidationSummary? System.Web.Mvc или System.Web.Helpers?