2010-03-09 3 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"속성의 정확한 유형은 무엇입니까? –

+0

메시지 목록을 생성하는 데 사용한 코드를 표시 할 수 있습니까? 내 추측은 그것이 당신의 실수가있는 곳입니다. 이것이 Linq2SQL 또는 Entities Framework 인 경우 "로드"문이 부족할 수 있습니다. – Alxandr

+0

'ViewData.Model'을'IEnumerable '로 변환하면 어떻게됩니까? – SLaks

답변

3

나는 그것이하지만, 도움이 될 것입니다 있는지 확실하지 않다

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

Inherits 선언을 변경해보십시오.

+0

'System.Collections.Generic.IList'를 의미합니까? – bzlm

+0

@bzlm : 예, 있습니다. 감사. – SLaks

+0

아마 IList에 대해서는이 작업을 수행 할 필요가 없지만 특정 메시지에 대해서는 현명한 생각이들 것입니다. – James

관련 문제