2009-04-10 15 views
1

Hier ist das Setup - ich habe eine Ansicht, die Produkte auflistet. Auf dieser Seite habe ich eine Benutzersteuerungsansicht, die Kategorien auflistet.sind stark typisierte Benutzersteuerungsansichten nicht erlaubt asp.net mvc?

passiere ich die Liste der Artikel in den Blick wie so:

return View(myProducts); 

Die Benutzersteuerung Ansicht erhält die Daten, die er über Viewdata muss [ „Kategorie“]

Nun, wenn ich versuche, eine zu verwenden, stark typisierte Benutzersteuerung Ansicht wie folgt aus:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<myData.Models.Category>>" %> 

ich diesen Fehler:

T Das im Wörterbuch übergebene Modellelement ist vom Typ 'System.Collections.Generic.List 1[myData.Models.Product]' but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [myData.Models.Category]'.

Die Benutzersteuerungsansicht scheint verwirrt zu sein, da ich eine "Product" -Liste an die Ansicht übergebe. Also, wenn ich die starke Typisierung wie folgt entferne:

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

Alles funktioniert gut.

Also, sind stark typisierte Benutzerkontrollansichten einfach nicht erlaubt? Oder mache ich nur etwas falsch?

Antwort

0

Wenn Sie die Teilansicht rendern, verwenden Sie ViewData ["Category"] als das Modell, das Sie an das Steuerelement übergeben.

<% Html.RenderPartial("MyUserControl", ViewData["Category"], ViewData); %> 
+0

Genau das, was ich gesucht habe, danke! – codette

0

Eine generische Liste des Typs A kann nicht einer generischen Liste vom Typ B zugeordnet werden (wobei B von A abgeleitet ist). Dies ist eine allgemeine Regel für alle generischen Auflistungen in .Net.

+0

Ich denke das Problem ist, dass er das gleiche Modell für die Teilansicht als für die Seite verwendet. Den Definitionen zufolge sollten sie völlig unterschiedliche Modelle sein und ich denke, dass er nur eine Signatur verwenden muss, die es ihm erlaubt, das richtige Modell in das Partielle zu übertragen. – tvanfosson

Verwandte Themen