楠槡

ASP.NET MVC学习笔记04数据传递

2017-05-14

上一篇的末尾讲到了,在了解模型之前,先来看看ASP.NET MVC是如何将数据从控制器传递给视图的。


简单梳理一下:

控制器想要请求的URL,控制器类是给您写代码来处理传入请求的地方,并从数据 库中检索数据,并最终决定什么类型的返回结果会发送回浏览器。视图模板可以被控制器 用来产生格式化过的HTML从而返回给浏览器.

控制器负责给任何数据或者对象提供一个必需的视图模板,用这个视图模板来Render返回给浏览器的HTML。

最理想的模式下:一个视图模板应该永远不会执行业务逻辑或者直接和数据库进行交互。相应的,一个视图模板应该只和控制器所提供的数据进行交互。维持这种”隔离关系”可以帮助,保持代码的干净、测试性和更易维护。

比如,最开始的控制器的讲解时HelloController类中的Welcome方法从浏览器获取一个name和numTimes的参数,然后直接输出。如果使用视图,视图模板将生成动态的HTML,也就是说,需要通过合适的方式把数据从控制器传递给视图,从而生成动态HTML。如何实现呢,可以吧视图模板需要的动态数据(参数)在控制器中存放到一个ViewBag对象中,然后视图模板来访问这个对象,看下具体操作。

Controller中的Welcome方法

注意这里的类型是ActionResult ,将MessageNumTimes的值 添加到ViewBag对象里。ViewBag是一个动态的对象,所以在没有给 ViewBag放置属性时,它没有任何属性,您可以把任何您想放置的对象放入到ViewBag对象中。而MVC会自动将URL中的Query String映射到方法的参数中去。

然后来在View中给Hello添加一个视图,和前面一样,选中Views/Hello 文件夹,右键添加——带有布局的MVC5视图页(Razor)。在Welcome的对话框中填入Welcome确认。选择布局页,仍然选择Views/Shared/_Layout.cshtml .
编辑Welcome的View并通过路由传值

模型绑定(model binder) 使得数据从URL传递给控制器。控制器将数据装入到ViewBag对象中,通过该对象传递给视图。然后视图为用户生成显示所需的HTML。

在上面的示例中,使用了 ViewBag对象把数据从控制器传递给了视图。在后面的文章中,将使用视图模型来将数据从一个控制器传递到视图中。用视图模型来传递数据,这一般是首选的办法。

到这里,这是一种”M”模型,但不是数据库的那种“M”模型。

下一篇,开始正式讲解基于数据模型和模型类来实现的M——Model.

Tags: dotNET
使用支付宝打赏
使用微信打赏

若你觉得我的文章对您有帮助,点击上方按钮请我喝杯咖啡☕

若文章中存在问题,或您有任何意见和疑问,均可与我联系

扫描二维码,分享此文章 📱