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?
Quel est le type exact de propriété "ViewData.Model"? –
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
Que se passe-t-il si vous lancez 'ViewData.Model' en' IEnumerable '? –
SLaks