2010-03-18 10 views
15

Ho appena installato MVC2 e ho una vista simile a questaErrore "La vista su ~/Views/Page/home.aspx 'deve derivare da ViewPage, ViewPage <TViewData>, ViewUserControl o ViewUserControl <TViewData>"

<%@ 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> 

E il controller sta solo restituendo la vista. Ma quando ho eseguito alla pagina ottengo questo errore:

System.InvalidOperationException: The view at '~/Views/Page/home.aspx' must derive from ViewPage, ViewPage, ViewUserControl, or ViewUserControl.

+0

Sei sicuro che il codice che hai mostrato appartiene a '~/Vista/Pagina/home.aspx'? –

+0

hai risolto il problema facendo una domanda. grazie. Ho visto che hai avuto Inherits = "System.Web.Mvc.ViewPage e l'ho usato, ora posso usare reportviewer nella mia app MVC5! – JoshYates1980

+0

Potresti aver dimenticato di cambiare la classe base generata automaticamente da tuo CodeBehind- File, vedere https://stackoverflow.com/a/47433765/3423823 - almeno questo era il mio problema, mi sono imbattuto in più domande che non suggeriscono questo – chriszo111

risposta

20

Si potrebbe involontariamente caricare due versioni del framework MVC nella stessa applicazione. Per confermare, scaricare MVC 2 Futures da http://aspnet.codeplex.com/releases/view/41742. C'è un file MvcDiagnostics.aspx in questo file ZIP.

  1. Copia MvcDiagnostics.aspx nella radice del progetto web.
  2. Riprodurre l'errore.
  3. Dopo aver riprodotto l'errore, andare in /MvcDiagnostics.aspx e vedere se si lamenta (sarà in grassetto in caratteri rossi) su più versioni del framework in fase di caricamento. Lo strumento dovrebbe suggerire una risoluzione se questo è il caso.

Non dimenticare di eliminare MvcDiagnostics.aspx dal progetto quando hai finito.

+0

+1: ho avuto lo stesso problema, e nel mio caso c'erano anzi due versioni diverse di MVC2 caricate.Non sapevo di cosa fosse la diagnostica, comunque. Buono a sapersi. – mnemosyn

+0

Sì, questo era il problema, ho finito per dover solo contrassegnare la dll MVC come copia locale sul progetto web e risolto il problema, grazie! –

+0

Grazie. Mi ha aiutato a migrare la soluzione da MVC 1.0 a MVC 4.0 – user2323308

1

Facendo sia un batch->build->clea n a livello di soluzione o una pulita a livello di progetto di solito prende cura di questo, se avete già fatto la due diligence di rimozione/sostituzione della versione indesiderato (s) di System.Web.Mvc dai riferimenti del progetto e * .config file ...

0

si potrebbe provare a utilizzare il ASP.NET MVC 3 Application Upgrader

migliore per farlo con il vostro codice sotto controllo del codice sorgente, in questo modo è possibile tutto ciò occhio-palla che è modifiche. Aggiorna il tuo javascript che non volevo, quindi l'ho ripristinato e ho mantenuto solo le modifiche apportate a web.config per il rasoio.

Assicurarsi di leggere su cosa fa e cosa non supporta su this blog post.

0

Ho risolto questo problema per me stesso facendo in modo che il mio motore di visualizzazione personalizzato ereditasse direttamente RazorViewEngine.

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

E poi la registrazione che viewengine in caso Global.asax presentare Application_Start:

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

Chiaramente questo presuppone che si sta utilizzando rasoio.

0

Controllare il riferimento al file System.Web.Mvc.dll come riferimento. Assicurarsi che indichi C: \ Programmi (x86) \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll

Se il suo puntamento a quello in ASP.NET MVC 4 directory quindi apri il file di progetto in un blocco note.Cercare

<Reference Include="System.Web.Mvc"> 
    <Private>False</Private> 
</Reference> 

Questo dovrebbe essere cambiata a

<Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35, processorArchitecture=MSIL" /> 

Ciò contribuirà a puntare alla specifica versione di MVC

Problemi correlati