Ошибка «Представление в« ~ / Views / Page / home.aspx »должно быть производным от ViewPage, ViewPage <TViewData>, ViewUserControl или ViewUserControl <TViewData>» - PullRequest
15 голосов
/ 18 марта 2010

Я только что установил 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.

Ответы [ 6 ]

20 голосов
/ 18 марта 2010

Вы можете непреднамеренно загрузить две версии инфраструктуры MVC в одно и то же приложение. Для подтверждения загрузите MVC 2 Futures с http://aspnet.codeplex.com/releases/view/41742. В этом ZIP-файле есть файл MvcDiagnostics.aspx .

  1. Скопируйте MvcDiagnostics.aspx в корень вашего веб-проекта.
  2. Воспроизвести ошибку.
  3. После воспроизведения ошибки перейдите в /MvcDiagnostics.aspx и посмотрите, жалуется ли она (будет выделена жирным красным шрифтом) на несколько загружаемых версий платформы. Инструмент должен предложить решение, если это так.

Не забудьте удалить MvcDiagnostics.aspx из вашего проекта, когда вы закончите.

2 голосов
/ 18 марта 2010

Я получал эту ошибку при обновлении проекта 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.

1 голос
/ 06 апреля 2011

Выполнение batch->build->clea n на уровне решения ИЛИ чистка на уровне проекта обычно позаботится об этом, если вы уже провели должную проверку удаления / замены нежелательной версии (версий) System.Web.Mvc из проекта ссылки и * .config файлы ...

0 голосов
/ 19 декабря 2013

Проверьте ссылку на файл 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

0 голосов
/ 14 февраля 2013

Я решил эту проблему для себя, когда мой пользовательский движок просмотра напрямую наследовал RazorViewEngine.

public class MainViewEngine : RazorViewEngine
{
    public MainViewEngine()
    {...
}}

И затем регистрация этого viewengine в файле Global.asax событие Application_Start:

ViewEngines.Engines.Clear();
        ViewEngines.Engines.Add(new MainViewEngine());

Очевидно, это предполагает, что вы используете Razor.

0 голосов
/ 11 декабря 2012

Вы можете попробовать использовать ASP.NET MVC 3 Application Upgrader

Лучше всего делать это с вашим кодом под контролем исходного кода, чтобы вы могли видеть все, что меняется. Он обновляет ваш javascript, который я не хотел, поэтому я отменил его и сохранил только те изменения, которые он вносит, в web.config для бритвы.

Обязательно прочитайте о том, что он делает и что не поддерживает, в этом сообщении в блоге .

...