Ошибка "Просмотр в '~/Views/Page/home.aspx' должен происходить из ViewPage, ViewPage <TViewData>, ViewUserControl или ViewUserControl <TViewData>"
Я только что установил MVC2, и у меня есть представление, похожее на это
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Home.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Home
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Home</h2>
</asp:Content>
И контроллер просто возвращает представление. Но когда я запускаю страницу, я получаю эту ошибку:
System.InvalidOperationException: представление в '~/Views/Page/home.aspx' должно происходить из ViewPage, ViewPage, ViewUserControl или ViewUserControl.
Ответы
Ответ 1
Возможно, вы случайно включили две версии среды MVC в одно приложение. Чтобы подтвердить, загрузите фьючерсы MVC 2 из http://aspnet.codeplex.com/releases/view/41742. В этом файле ZIP есть файл MvcDiagnostics.aspx.
- Скопируйте MvcDiagnostics.aspx в корень вашего веб-проекта.
- Воспроизводите ошибку.
- После воспроизведения ошибки перейдите в /MvcDiagnostics.aspx и посмотрите, не жалуется ли она (будет выделена жирным красным надписью) о нескольких версиях загружаемой инфраструктуры. Инструмент должен предлагать разрешение, если это так.
Не забудьте удалить MvcDiagnostics.aspx из своего проекта, когда вы закончите.
Ответ 2
Я получал эту ошибку, обновляя проект MVC 1.0 до MVC 2.0. Если вы делаете это, посмотрите http://weblogs.asp.net/leftslipper/archive/2010/03/10/migrating-asp-net-mvc-1-0-applications-to-asp-net-mvc-2-rtm.aspx
Дважды проверьте ваш web.config на новый проект MVC 2.0.
Ответ 3
Выполнение либо batch->build->clea
n на уровне решения, либо чистое на уровне проекта, как правило, позаботится об этом, если вы уже провели тщательную проверку удаления/замены нежелательной версии (-ов) System.Web.Mvc
из проекта ссылки и файлы *.config...
Ответ 4
Вы можете попробовать использовать ASP.NET MVC 3 Application Upgrader
Лучше всего сделать это с помощью вашего кода под контролем источника, таким образом вы сможете смотреть все, что меняется. Он обновляет ваш javascript, который мне не нужен, поэтому я вернул его и сохранил внесенные изменения в web.config для бритвы.
Обязательно прочитайте, что он делает и что он не поддерживает на этом сообщении в блоге.
Ответ 5
Я решил эту проблему для себя, установив свой собственный механизм просмотра непосредственно на RazorViewEngine.
public class MainViewEngine : RazorViewEngine
{
public MainViewEngine()
{...
}}
И затем зарегистрируйте этот просмотр в файле Global.asax Application_Start:
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new MainViewEngine());
Очевидно, это предполагает, что вы используете Razor.
Ответ 6
Проверьте ссылку на файл System.Web.Mvc.dll в своей ссылке. Убедитесь, что он указывает на C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll
Если он указывает на тот, который находится в каталоге ASP.NET MVC 4, откройте файл проекта в блокноте. Найдите
<Reference Include="System.Web.Mvc">
<Private>False</Private>
</Reference>
Это должно быть изменено на
<Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35, processorArchitecture=MSIL" />
Это поможет указать конкретную версию MVC