Задача
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, который я только что перенес на ASP.NET MVC 3 RC. Я прочитал заметки о выпуске и обновил соответственно, но все еще столкнулся с проблемой с WebMatrix. Я нашел такой вопрос, когда кто-то из команды 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, который знает, как загружать встроенные ресурсы и удаляется global.asax, это довольно стандартная область MVC.
Я попытался создать новый пустой проект плагина MVC 3 и медленно добавить соответствующий код. Это гарантирует, что все ссылки и web.configs верны. Но я все еще получаю ту же модель проблемы, описанной выше. Проект компилируется во время разработки, но выдает проблему компиляции во время выполнения, когда он пытается создать вид, который выглядит.
Просто чтобы прояснить, все это прекрасно работает в ASP.NET MVC 3 Preview 1 . Однако теперь, когда я обновил его до MVC 3 RC, у меня работает основной веб-сайт, но внешняя область отказывается работать.
Нет ничего плохого в самой структуре плагина. Он отлично работает в MVC 3 Preview 1. Я ищу ответы, которые могли бы пролить немного света на то, что может происходить в MVC 3 RC, и почему я могу использовать получение этой ошибки модели.
Есть идеи?
Обновление
Интересно, если я изменю объявление модели в верхней части представления на синтаксис Preview 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 и все необходимые библиотеки MVC 3 RC присутствуют. Включая необходимые файлы web.config. Как будто они недоступны, когда представление пытается быть загруженным, однако.
Фактический синтаксис бритвы, на мой взгляд, является частью System.Web.WebPages? Где живет Html.ValidationSummary? System.Web.Mvc или System.Web.Helpers?