Обед ботаника, возможно крайний вопрос нуба, список обедов - PullRequest
1 голос
/ 24 июня 2009

Я пытаюсь заставить NerdDinner работать, и у меня возникли проблемы.

Я быстро проследил за моментом, когда происходит действие actionResult для индекса, и увидел, что элементы из dinRepository находятся справа от оператора присвоения.

Однако кажется, что когда я перехожу к следующей строке кода, обеды, которые передаются в представление, не содержат набора записей.

Может ли кто-нибудь указать мне, где я иду не так.

В результате страница отображается идеально, но записи не отображаются.

namespace NerdDinner.Controllers
{
    public class DinnersController : Controller
    {       
        DinnerRepository dinnerRepository = new DinnerRepository();  

        // GET: /Dinners/
        public ActionResult Index()
        {
           var dinners = dinnerRepository.FindUpcomingDinners().ToList();

           return View("Index", dinners);            
        }

        // GET: /Dinners/Details/2
        public ActionResult Details(int id)
        {
            Dinner dinner = dinnerRepository.GetDinner(id);

            if (dinner == null)
                return View("NotFound");
            else
                return View("Details", dinner);
        }
    }
}

А вот и код вида

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"      Inherits="System.Web.Mvc.ViewPage<IEnumerable<NerdDinner.Models.Dinner>>" %>



<asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server">

<h2>Upcoming Dinners</h2>

<ul>
<% foreach (var dinner in Model)
   {%>

<li> 
<%= Html.Encode(dinner.Title)%>
on
<%= Html.Encode(dinner.EventDate.ToShortDateString())%>
@
<%= Html.Encode(dinner.EventDate.ToShortTimeString())%>


</li>
<% } %>

</ul>
</asp:Content>

И код модели также

открытый класс DinnerRepository { private NerdDinnerDataContext db = new NerdDinnerDataContext ();

    // Query Methods

    public IQueryable<Dinner> FindAllDinners()
    {
        return db.Dinners;
    }

    public IQueryable<Dinner> FindUpcomingDinners()
    {
        return from dinner in db.Dinners
               where dinner.EventDate > DateTime.Now
               orderby dinner.EventDate
               select dinner;
    }

    public Dinner GetDinner(int id)
    {
        return db.Dinners.SingleOrDefault(d => d.DinnerID == id);
    }

    // Insert/Delete Methods

Ответы [ 3 ]

1 голос
/ 25 июня 2009

Я только недавно прошел этот урок и получил почти все работает. Я бы прошел через все эти шаги.

  1. (очевидно) Проверьте, есть ли в базе данных данные для захвата.
  2. Убедитесь, что ваш DinnerRepository возвращает объект IQueryable для всех обедов, режим отладки должен позволить вам расширить запрос. Похоже, вы сделали это, но вы были немного расплывчаты, вы говорили, что правый аргумент содержит элементы Dinner, но переменная, которой вы его назначаете, не содержит элементов в следующей строке?
  3. Убедитесь, что ваша страница просмотра наследуется от строго типизированного представления. Например. System.Web.Mvc.ViewPage<IEnumerable<NerdDinner.Models.Dinner>>
0 голосов
/ 24 июня 2009

Проверьте свой DinnersRepository тоже. Если эта строка:

var dinners = dinnerRepository.FindUpcomingDinners (). ToList ();

возвращает «пустой набор записей», вы должны выяснить, почему, перейдя (ярлык F11) к методу хранилища.

Добавьте быстрый просмотр 'обедов' и перешагните через эту строку, вы обязательно должны увидеть непустой список, если есть какие-либо данные, которые будут иметься.

0 голосов
/ 24 июня 2009

Мне интересно, не совпадают ли ViewData представления с объектом dinners, который передается? Попробуйте переключить обеды, передаваемые посредством вызова View (), на ViewData ["dinners"] = dinners. Затем обновите код пользовательского интерфейса, чтобы извлечь данные из представления вместо модели, на которую они, вероятно, ссылаются в настоящее время.

Можете ли вы также опубликовать свой код просмотра?

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