四、 修改Forum控制器
Forum控制器,类似于ForumRepository,还提供了两个新的方法。Forum控制器的修改版本包含于列表3中。
列表3–Controllers\ForumController.cs
using System;
using System.Web.Mvc;
using MvcForums.Models;
using Microsoft.Web.Mvc;
namespace MvcForums.Controllers
{
public class ForumController : Controller
{
private IForumRepository _repository;
public ForumController()
: this(new ForumRepository())
{ }
public ForumController(IForumRepository repository)
{
_repository = repository;
}
public ActionResult Index()
{
ViewData.Model = _repository.SelectThreads();
return View("Index");
}
public ActionResult Create(FormCollection form)
{
//创建新的消息
var messageToCreate = new Message();
if (!String.IsNullOrEmpty(form["parentThreadId"]))
messageToCreate.ParentThreadId = int.Parse(form["parentThreadId"]);
if (!String.IsNullOrEmpty(form["parentMessageId"]))
messageToCreate.ParentMessageId = int.Parse(form["parentMessageId"]);
messageToCreate.Author = form["author"];
messageToCreate.Subject = form["subject"];
messageToCreate.Body = form["body"];
messageToCreate.EntryDate = DateTime.Now;
//添加到数据库
_repository.AddMessage(messageToCreate);
//重定向
return RedirectToAction("Index");
}
public ActionResult Thread(int threadId)
{
ViewData.Model = _repository.SelectMessages(threadId);
return View("Thread");
}
}
}
using System.Web.Mvc;
using MvcForums.Models;
using Microsoft.Web.Mvc;
namespace MvcForums.Controllers
{
public class ForumController : Controller
{
private IForumRepository _repository;
public ForumController()
: this(new ForumRepository())
{ }
public ForumController(IForumRepository repository)
{
_repository = repository;
}
public ActionResult Index()
{
ViewData.Model = _repository.SelectThreads();
return View("Index");
}
public ActionResult Create(FormCollection form)
{
//创建新的消息
var messageToCreate = new Message();
if (!String.IsNullOrEmpty(form["parentThreadId"]))
messageToCreate.ParentThreadId = int.Parse(form["parentThreadId"]);
if (!String.IsNullOrEmpty(form["parentMessageId"]))
messageToCreate.ParentMessageId = int.Parse(form["parentMessageId"]);
messageToCreate.Author = form["author"];
messageToCreate.Subject = form["subject"];
messageToCreate.Body = form["body"];
messageToCreate.EntryDate = DateTime.Now;
//添加到数据库
_repository.AddMessage(messageToCreate);
//重定向
return RedirectToAction("Index");
}
public ActionResult Thread(int threadId)
{
ViewData.Model = _repository.SelectMessages(threadId);
return View("Thread");
}
}
}
该Create()动作负责在数据库中创建一个新的消息。这个动作使用了一个传递到此动作的form参数并且生成Message类的一个实例。然后,借助于该ForumRepository.AddMessage()方法,该消息类被添加到数据库中。
此外,Thread()动作返回一个相应于一个特定线程的消息的集合。这个动作把它的所有工作代理到ForumRepository.SelectMessages()方法。