2010-03-09 4 views
2

J'utilise un foreach pour parcourir une IList d'objets dans une vue partielle dans ASP.NET MVC.foreach ne pas initialiser la variable de boucle

Voici le code entier (le message est une de mes classes du modèle).

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

<% 
if (ViewData.Model.Count > 0) 
{ 
    foreach (MvcTest.Models.Message m in ViewData.Model) 
    { 
     Response.Write(m.RenderHtml()); 
    } 
} 

%> 

Pour une raison quelconque, cela génère un CS0165 sur la ResponseWrite - se plaignant que m ne peuvent pas être initialisées.

Je réécrite comme ceci:

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

<% 
//Can't see why I have to declare this as a variable, but I get CS0165 if I use ViewData.Model directly in the foreach 
IList<MvcTest.Models.Message> messages = ViewData.Model; 
if (messages.Count > 0) 
{ 
    foreach (MvcTest.Models.Message m in messages) 
    { 
     Response.Write(m.RenderHtml()); 
    } 
} 

%> 

-à-dire déclarant explicitement une variable pour le IList plutôt que d'utiliser simplement le (fortement typé) modèle, et il fonctionne très bien.

Quelqu'un peut-il expliquer pourquoi ce que j'ai fait résout le problème?

+0

Quel est le type exact de propriété "ViewData.Model"? –

+0

Pouvez-vous montrer le code que vous avez utilisé pour générer la liste des messages? Je suppose que c'est là que se trouve votre erreur. Si c'est Linq2SQL ou Entities Framework, vous n'avez probablement pas d'instruction "Load". – Alxandr

+0

Que se passe-t-il si vous lancez 'ViewData.Model' en' IEnumerable '? – SLaks

Répondre

3

Essayez de changer la déclaration Inherits à

Inherits="System.Web.Mvc.ViewUserControl<System.Collections.Generic.IList<MvcTest.Models.Message>>" 

Je ne suis pas sûr que cela vous aidera, cependant.

+0

Vous voulez dire 'System.Collections.Generic.IList'? – bzlm

+0

@bzlm: Oui, je le fais; Merci. – SLaks

+0

Probablement pas besoin de faire cela pour IList, mais pour le message particulier, je pense que ce serait sage. – James