foreach и GetEnumerator / asp.net MVC 2 - PullRequest
       4

foreach и GetEnumerator / asp.net MVC 2

0 голосов
/ 03 ноября 2010

Привет, у меня проблема с оператором foreach.У меня есть метод моего контроллера:

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

my viewModel:

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

, и когда я хочу отобразить список моих комментариев, я не могу из-за этой ошибки:

Оператор foreach с ошибкой 2 не может работать с переменными типа «void», поскольку «void» не содержит общедоступного определения для «GetEnumerator»
c: ... \ Views \ Home \ ShowComments.aspx

Мои первые 3 строки представления:

<%@ 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>

Я знаю, что это не хороший способ отображения данных, но яо заводе весь мой проект.foreach отображение displayTemplate.ascx вызывает проблему.Капча - мой простой способ авторизации человека.и я уверен, что это работает хорошо.

1 Ответ

3 голосов
/ 03 ноября 2010

Изменить после просмотра цикла foreach.

Reverse() возвращает пустоту - он изменяет список путем обращения к нему и не возвращает список. Вы пытаетесь «предвидеть» возвращаемое значение Reverse(), что является недействительным - отсюда и ошибка.

Вы можете удалить вызов на Reverse() (и заполнить его в обратном порядке) или добавить что-то подобное в контроллер:

entrybox.comments.Reverse();

Или, если необходимо:

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

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

 } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...