2010-11-02 102 views
0

嗨我有問題與foreach語句。我有我的控制器的方法:foreach和GetEnumerator/asp.net mvc 2

public ActionResult ShowComments(int id) 
{ 
    EntryBox entrybox = new EntryBox(); 
    entrybox.entry = (from e in BlogDB.Enteries 
         where e.id == id 
         select e) as Entry; 
    entrybox.comments = (from c in BlogDB.Comments 
         where c.EntryID == id 
         select c) as List<Comment>; 
    Captcha captcha = new Captcha(); 

    ViewData.Model = entrybox; 

    return View(); 
} 

我的視圖模型:

public class EntryBox 
{ 
    public Entry entry; 
    public List<Comment> comments; 
} 

而當我想以顯示我的意見名單我來,因爲這個錯誤不能:

Error 2 foreach statement cannot operate on variables of type 'void' because 'void' does not contain a public definition for 'GetEnumerator'
c:...\Views\Home\ShowComments.aspx

我的第一個觀點:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<BlogMaker_v06.viewModels.EntryBox>" %> 
<%@ Import Namespace="BlogMaker_v06.Models" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="ContentHolder" runat="server"> 
<% User LoggedAs = HttpContext.Current.Session["LoggedAs"] as User; %> 

    <div style="width: 90%"> 
    <b>Treść komentowanego wpisu: <br /><br /></b> 
     <p style="text-indent: 10px; text-align: justify;"> 
      <%= Model.entry.EntryContent.TagsParse() %> 
     </p> 
       <% Html.BeginForm("AddComment/" + ViewData["id"].ToString(), "Home"); 
     {  %> 
     Write your comment: <br /> 
     <table> 
     <tr><td>Name:</td><td><input type="text" name="Author" id="Author" value="<%= LoggedAs.Login %>" onfocus="javascript:this.value='';" <% if (LoggedAs.id != 2) {%> disabled <%}%>/></td></tr> 
     <tr><td>Website:</td><td><input type="text" name="AuthorWebsite" id="AuthorWebsite" value="http://" /></td></tr> 
     <tr><td>Przepisz cyframi: <%= ViewData["captcha"] %></td><td><input type="text" name="Captcha" id="Captcha" /></td></tr> 
     </table> 
     <textarea name="CommentContent" id="CommentContent" rows="5" cols="25" style="width: 100%; height: 10%; border: 1px solid #C0C0C0"></textarea><br /> 

     <input type="submit" value="Add comment" /> 
    <% }  %> 

     <br /><br /> 
     <b>Komentarze użytkowników:</b> 
    <% foreach (var comment in ViewData.Model.comments.Reverse()) 
    { 

     Html.RenderPartial("~/Views/Home/CommentTemplate.ascx", comment);  

} %> 
</div> 

我知道它不是好辦法顯示的數據,但我對我的refactory整個項目。 foreach顯示commentTemplate.ascx導致問題。驗證碼是我授權人的簡單方法。我相信它運作良好。

+0

脫離主題,但你的'captcha'做了什麼?它沒有被傳遞給視圖。 – 2010-11-02 22:16:58

+1

你可以發佈其餘的視圖嗎?你是否只循環評論? – Vishal 2010-11-02 22:17:34

+0

忘了問......哪裏是foreach? – 2010-11-02 22:18:37

回答

3

看到你的foreach循環後編輯。

Reverse()返回一個void - 它通過反轉來改變列表,並且不返回列表。您試圖對「Reverse()」的返回值進行「foreach」,這是無效的 - 因此是錯誤。

您可以刪除您的來電Reverse()(並以相反的順序來填充它),或像這樣添加一些控制器:

entrybox.comments.Reverse(); 

或者,如果你必須把你的觀點:

<% ViewData.Model.comments.Reverse(); 
    foreach (var comment in ViewData.Model.comments) 
    { 

     Html.RenderPartial("~/Views/Home/CommentTemplate.ascx", comment);  

} %> 
+0

如果在設計器中建立了適當的關係,LINQ是否已經將'entrybox.comments'填充爲'List(Of Comments)'? – 2010-11-02 22:22:03

+0

@trn看到最新編輯 – 2010-11-02 23:17:21

+0

哦天哪,謝謝。現在它按我的意願工作;)thx再次。 – TrN 2010-11-02 23:48:46