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

  • 相关阅读:
    codevs 1086 栈 2003年NOIP全国联赛普及组
    1200 同余方程 2012年NOIP全国联赛提高组
    【bzoj4939】【YNOI2016】掉进兔子洞(莫队)
    洛谷P3674 小清新人渣的本愿(莫队)
    Lucas卢卡斯定理
    组合数学习笔记
    洛谷P3178 [HAOI2015]树上操作(线段树)
    洛谷P3258 [JLOI2014]松鼠的新家(树上差分+树剖)
    洛谷P2526 [SHOI2001]小狗散步(二分图匹配)
    bzoj3140: [Hnoi2013]消毒(二分图)
  • 原文地址:https://www.cnblogs.com/nivi3000/p/4937669.html
Copyright © 2020-2023  润新知