After adding the code for pages 106 and 107, I am getting this error when displaying the /Dinners URL:
Server Error in '/' Application.
--------------------------------------------------------------------------------
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS0246: The type or namespace name 'Dinner' could not be found (are you missing a using directive or an assembly reference?)
Source Error:
Line 170:
Line 171: [System.Runtime.CompilerServices.CompilerGlobalScop eAttribute()]
Line 172: public class views_dinners_index_aspx : System.Web.Mvc.ViewPage<NerdDinner.Helpers.Paginat edList<Dinner>>, System.Web.SessionState.IRequiresSessionState, System.Web.IHttpHandler {
Line 173:
Line 174: private static bool @__initialized;
Source File: c:\Users\Knute\AppData\Local\Temp\Temporary ASP.NET Files\root\655b8610\3cbe4a13\App_Web_index.aspx.32 d6c807.kimgmkgd.0.cs Line: 172
-------------------------
Page 106 says to add a class called PaginatedList<T> but it doesn't say where to put it. Based on what was said in page 107 I put it in the Helpers folder. This is a new folder I created in the NerdDinner project.
Here is PaginatedList<T>:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace NerdDinner.Helpers
{
public class PaginatedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int PageSize { get; private set; }
public int TotalCount { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = source.Count();
TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);
this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
}
public bool HasPreviousPage
{
get
{
return (PageIndex > 0);
}
}
public bool HasNextPage
{
get
{
return (PageIndex + 1 < TotalPages);
}
}
}
}
As per page 107 I changed the GET: /Dinners/ method in DinnersController: (I had to add
Code:
using NerdDinner.Helpers;
to get it to work.
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using NerdDinner.Models;
using NerdDinner.Helpers;
namespace NerdDinner.Controllers
{
public class DinnersController : Controller
{
DinnerRepository dinnerRepository = new DinnerRepository();
//
// GET: /Dinners/
// /Dinners/Page/2
public ActionResult Index(int page = 0)
{
const int pageSize = 10;
var upcomingDinners = dinnerRepository.FindUpcomingDinners();
var paginatedDinners = new PaginatedList<Dinner>(upcomingDinners, page, pageSize);
return View(paginatedDinners);
}
...
Then I changed \Views\Dinners\Index.aspx as per page 107:
Code:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<NerdDinner.Helpers.PaginatedList<Dinner>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server">
<h2>UpComming Dinners</h2>
<ul>
<% foreach (var dinner in Model) { %>
<li>
<%: Html.ActionLink(dinner.Title, "Details", new { id=dinner.DinnerID }) %>
on
<%: dinner.EventDate.ToShortDateString() %>
@
<%: dinner.EventDate.ToShortTimeString() %>
</li>
<% } %>
</ul>
<% if (Model.HasPreviousPage)
{ %>
<%: Html.RouteLink("<<<", "UpcomingDinners", new { page = (Model.PageIndex - 1) })%>
<% } %>
<% if (Model.HasNextPage)
{ %>
<%: Html.RouteLink(">>>", "UpcomingDinners", new { page = (Model.PageIndex + 1) })%>
<% } %>
</asp:Content>
Any help would be appreciated. Thanks.
--
Knute