2010-03-09 147 views
2

我正在使用foreach循环通过ASP.NET MVC中的部分视图中的对象的IList。foreach未初始化循环变量

下面是整个代码(Message是我的模型中的一个类)。

<%@ 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()); 
    } 
} 

%> 

由于某种原因,这会在ResponseWrite上生成一个CS0165 - 抱怨m不能被初始化。

我重写这样的:

<%@ 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()); 
    } 
} 

%> 

即明确宣布为IList的一个变量,而不是仅仅使用(强类型)型号,并能正常工作。

任何人都可以解释为什么我做了修复问题?

+0

“ViewData.Model”属性的确切类型是什么? – 2010-03-09 13:27:29

+0

您可以显示您用于生成消息列表的代码吗?我的猜测是那是你的错误所在。如果这是Linq2SQL或Entities Framework,那么您可能只是缺少一个“Load”语句。 – Alxandr 2010-03-09 13:33:06

+0

如果将'ViewData.Model'强制转换为'IEnumerable ',会发生什么? – SLaks 2010-03-09 13:33:14

回答

3

尝试改变Inherits声明

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

我不知道它是否会有所帮助,但是。

+0

你的意思是'System.Collections.Generic.IList'? – bzlm 2010-03-09 13:35:46

+0

@bzlm:是的,我愿意。谢谢。 – SLaks 2010-03-09 13:36:30

+0

可能不需要为IList做这件事,但对于特定的消息,我认为这将是明智的。 – James 2010-03-09 13:45:44