camainc
camainc

Reputation: 3810

MVC Newbie Question about Strongly-Typed Views

I think this is a namespace issue, and the answer is probably dead simple, but I'm new at this MVC stuff.

I have multiple views named "Index." This was not a problem until I tried to create a new, strongly-typed view named "Index."

(For what its worth, I'm trying to follow along with the steps in the NerdDinner sample, but in VB instead of C#.)

When I added the strongly-typed view named "Index," the compiler threw this error:

Base class 'System.Web.Mvc.ViewPage(Of System.Collections.Generic.List(Of Models.User))' specified for class 'Index' cannot be different from the base class 'System.Web.Mvc.ViewPage' of one of its other partial types.

Can someone enlighten me on why this is happening, and what I can do to alleviate the problem?

Thanks in advance.

VIEW:

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" 
         AutoEventWireup="false" CodeBehind="Index.aspx.vb" 
         Inherits="SampleSite.Index" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
</asp:Content> 

Code Behind:

Imports System.Web.Mvc 
Imports System.Collections.Generic 

Partial Public Class Index Inherits System.Web.Mvc.ViewPage(Of List(Of SampleSite.Models.User)) 
End Class 

Upvotes: 2

Views: 345

Answers (3)

camainc
camainc

Reputation: 3810

I figured it was just a namespace issue. I wrapped the offending Index class in a namespace like below and it solved the problem. Not sure if this is the correct way to solve this problem, but it works.

Imports System.Web.Mvc Imports System.Collections.Generic

Namespace SampleSite

Partial Public Class Index
    Inherits System.Web.Mvc.ViewPage(Of List(Of Models.User))

End Class

End Namespace

Upvotes: 0

Ariel Popovsky
Ariel Popovsky

Reputation: 4875

If you say you have multiple "Index pages" then the problem is that all have the same namespace. You have Index(a) derived from ViewPage and Index(b) derived from ViewPage of List(..), since the classes are declared partial and have equal namespaces the compiler tries to put them together in one class but is not possible since they don't inherit from the same base class.

Do this: Index (a) -> Inherits="SampleSite.Index" Index (b) -> Inherits="SampleSite.XXXXXXX.Index" and modify the code behind accordingly.

Upvotes: 0

marc_s
marc_s

Reputation: 754398

I would think you'll need to inherit from ViewPage(Of List(Of SampleSite.Models.User)) in your page definition:

Does it work that way??

Your strongly-typed ViewPage must inherit from the "ViewPage(Of T)" basic generic type - where the T is the type of the data you want to display in your view page (the "view model").

Marc

Upvotes: 1

Related Questions