7

In my MVC apps I normally declare a base view type that all of my views inherit from. I get a parser error when I specify Inherits="MyView" in my Page declaration, but not if I specify Inherits="MyApp.Web.Views.MyView".

Strangely enough, it works fine if I specify a strongly typed view name: Inherits="MyView<T> (where T is any valid type).

Why can I specify a strongly typed view without the full type name, but not a generic view?

My base view class is declared like this:

namespace MyApp.Web.Views {
    public class MyView : MyView<object> {
    }

    public class MyView<TModel> : ViewPage<TModel> where TModel : class {
    }
}

UPDATE: Note that I do import MyApp.Web.Views via web.config. If I did not, then the strongly typed approach (Inherits="MyView<T>") wouldn't work either.

Seth Petry-Johnson
  • 11,845
  • 7
  • 49
  • 69

2 Answers2

1

You can add your namespace to the <namespaces> element of your web.config file then you should be able to use Inherits="MyView"

<pages>
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="MyApp.Web.Views" />
  </namespaces>
</pages>
David Glenn
  • 24,412
  • 19
  • 74
  • 94
1

From another post: Here's the underlying issue: the ASP.NET page parser does not support generics as a page type

Read more here- Generic Inherited ViewPage<> and new Property

Community
  • 1
  • 1
moomi
  • 151
  • 5
  • Very interesting... I haven't read all of the code on that page yet, but it sounds like the issue I've reported is caused by some of the generic/non-generic juju that's being done behind the scenes. If I'm successful at using Justin's code to resolve my issue I'll post an update here. – Seth Petry-Johnson May 05 '10 at 13:02