Ошибка "Просмотр в '~/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 из своего проекта, когда вы закончите.

Ответ 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