ASP.NET MVC轻教程 Step By Step 4——Model、View和Controller

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的任务不仅如此。

 

posted @ 2015-11-05 23:00  iLoop  阅读(719)  评论(0编辑  收藏  举报