ASP.NET MVC中的Model(数据模型)主要包括定义数据结构、数据库读写、数据验证等等和对象处理相关的工作。
在解决方案资源管理器中找到Model文件夹,点击右键,添加一个新类,名为“Message”。包含三个属性:NickName(用户名)、Content(内容)、ReleaseDate(发布日期)。
public class Message
{
public string NickName { set; get; }
public string Content { set; get; }
public DateTime ReleaseDate { set; get; }
}
Model需要包括对数据进行新增、删除、更新及查询等数据持久化操作。但是作为Demo,我们现在不想和数据库打交道,暂时把数据写在代码里。这样可以把我们的注意力更集中在MVC本身。
现在在HomeController类中添加一个局部静态List,用来模拟数据源。
public class HomeController : Controller
{
private static List<Message> messages = new List<Message> {
new Message {NickName="用户1",Content="测试数据1",ReleaseDate=DateTime.Now},
new Message {NickName="用户2",Content="测试数据2",ReleaseDate=DateTime.Now},
new Message {NickName="用户3",Content="测试数据3",ReleaseDate=DateTime.Now},
new Message {NickName="用户4",Content="测试数据4",ReleaseDate=DateTime.Now},
new Message {NickName="用户5",Content="测试数据5",ReleaseDate=DateTime.Now},
new Message {NickName="用户6",Content="测试数据6",ReleaseDate=DateTime.Now},
new Message {NickName="用户7",Content="测试数据7",ReleaseDate=DateTime.Now},
new Message {NickName="用户8",Content="测试数据8",ReleaseDate=DateTime.Now}
};
并且把Index方法作如下修改。
public ActionResult Index()
{
return View(messages);
}
是的,我们可以将messages也就是数据源作为View方法的参数传递过去。这样Index视图就可以接收到messages,我们称这样的视图为强类型视图。
Index视图也需要做一些修改,才可以使用messages。
@model IEnumerable<MessageBoard.Models.Message> @{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<h1>MVC留言板</h1>
@foreach (var message in Model)
{
<p>@message.NickName</p>
<p>@message.Content</p>
<p>@message.ReleaseDate</p>
<br />
}
</body>
</html>
重要的是第一行代码,它表达视图将使用什么类型的数据模型。@model IEnumerable<MessageBoard.Models.Message>是指实现IEnumerable接口的Message集合,如果是单独的Message对象就写@model MessageBoard.Models.Message。
在Index动作方法中作为View方法的参数messages将会赋值给Index视图中的ViewData.Model属性,所以我们才能像使用messages一样去使用Model。此时我们可以获得message的代码提示,语法又足够简洁,这就是使用强类型视图的好处。
运行结果如下。
Model、View和Controller之间的关系可以用下图来表示。
Model、View和Controller三者彼此关联,相互依存又各自独立,同时三者都可以包含代码,业务逻辑处理代码很容易混乱且分散。个人体会在MVC程序中,Model设计要“重”;Controller要“轻”;View要“傻”。打个不恰当的比方,Model像电脑主机,Controller像键盘鼠标,View像显示器。当然在本文中的Demo,Model仅仅只是提供一个类模型,实际的程序Model的任务不仅如此。