Could not load type 'System.Web.Mvc.ViewUserControl<SOMETYPE>'

10,553

Solution 1

I looks that the view engine has problems compiling strongly typed base class in Inherit attribute. I had the same issue and updating the "pages" section of Web.Config to this helped:

 <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <controls>
          <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
        </controls>
        <!-- rest of your pages section -->
</pages>

Solution 2

Could not find why but the following helped (web.config):

<pages
         pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
         pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
         userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

Initially found similar for asp.net mvc 1

Solution 3

I had similar problem. There are several important points

  1. Required space between the brackets and type name.
  2. Need cast model for your model type.

Here's what I got

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl <MyNamespace.MyModel>" %>
<%@ Import Namespace="MyNamespace" %>
<% var model = (MyModel)Model; %>

<h1><% model.MyField %></h1>
Share:
10,553
Evgenyt
Author by

Evgenyt

Updated on June 04, 2022

Comments

  • Evgenyt
    Evgenyt almost 2 years

    I'm trying to deploy ASP.NET MVC 2 project (VS2010) to Win Server 2008 R2

    It works perfectly on dev machine. But strange error occurs at Server 2008 R2: When .ascx file has header that uses generic type:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyProj.Web.Models.RangeViewModel>" %>
    

    Server reports Could not load type 'System.Web.Mvc.ViewUserControl<MyProj.Web.Models.RangeViewModel>'.

    But when I declare somewhere in .cs file type like

    public class AA : System.Web.Mvc.ViewUserControl<MyProj.Web.Models.RangeViewModel>
    {
    }
    

    and use it instead in <%@ Control header. Then it works as it should.

    Am I missing something?

    UPDATE

    I deploy app in two steps (on server):

    1. Rebuild VS solution from source using command-line MSBuild (for .NET 4)
    2. Launch custom msbuild task (have publih.msbuild file for this) that executes two targets: Targets="ResolveReferences;_CopyWebApplication"
  • mare
    mare almost 14 years
    There's something wrong with your project or its build because that is not required in web.config for ASP.NET MVC application to work either locally or on the server.
  • PanJanek
    PanJanek almost 14 years
    Oh yes - for MVC2 it should be "Versions=2.0.0.0". Teoretically - if the MVC project is properly build and published this tweaking of "pages" section is not neccesary. In practice, when migrating between different versions and builds of MVC it's the easiest way to repair the project
  • Jafin
    Jafin about 13 years
    @mare you are right in one resepect, it should not be required, but in one instance we could not get an app executing without adding the pages tag as described. WOuld love to know the real issue, mayby machine.config is doing something?
  • bendytree
    bendytree about 10 years
    Similarly - you might see this error if you deployed a new "area" and forgot to copy the area's web.config. Just happened to me.