在我们讨论数据库和数据模型之前,让我们先讨论一下如何将数据从控制器传递给视图。控制器类将响应请求来的URL。控制器类是给您写代码来处理传入请求的地方,并从数据库中检索数据,并最终决定什么类型的返回结果会发送回浏览器。视图模板可以被控制器用来产生格式化过的HTML从而返回给浏览器。

控制器负责给任何数据或者对象提供一个必需的视图模板,用这个视图模板来Render返回给浏览器的HTML。最佳做法是:一个视图模板应该永远不会执行业务逻辑或者直接和数据库进行交互。相应的,一个视图模板应该只和控制器所提供的数据进行交互。维持这种"隔离关系"可以帮助,保持代码的干净、测试性和更易维护。

当前, HelloWorldController类中Welcome操作方法需要一个name和一个numTimes参数,然后直接输出给浏览器。相比只返回一个字符串,让我们来改变控制器,来使用视图模板吧。视图模板将生成动态的HTML,这意味着您需要通过适当的方式把数据从控制器传递给视图,从而才能生成动态的HTML。您可以把视图模板需要的动态数据 (参数)在控制器中放入到一个ViewBag对象中,然后视图模板可以访问这个对象。

打开HelloWorldController.cs文件,更改 Welcome方法,将MessageNumTimes的值添加到 ViewBag对象里。ViewBag是一个动态的对象,这意味着在您没有给ViewBag放置属性时,它没有任何属性,您可以把任何您想放置的对象放入到 ViewBag对象中。 ASP.NET MVC model binding system 会自动将地址栏中URL里的 query string映射到您方法中的参数(namenumTimes)。

完整的HelloWorldController.cs文件如下所示:

using System.Web;
using System.Web.Mvc;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Welcome(string name, int numTimes = )
{
ViewBag.Message = "Hello " + name;
ViewBag.NumTimes = numTimes;
return View();
}
}
}

现在ViewBag对象包含了数据,并将自动传递给视图模板。 接下来,您需要一个欢迎视图模板 !在生成菜单中,选择生成 MvcMovie (快捷键 Ctrl+Shift+B) ,以确保项目编译成功。

Views\HelloWorld文件夹上,右键单击”添加(视图)”,选择MVC 5 View Page with (Layout Razor).”

在 “指定项名称 (Specify Name for Item )” 对话框, 输入” Welcome”, 点击“确定(OK)”.    
在“选择布局(the Select a Layout Page”对话框,接受缺省的”布局_Layout.cshtml”,并点击“确定(OK)”.    

MvcMovie\Views\HelloWorld\Welcome.cshtml文件创建成功。

在Welcome.cshtml文件里替换标记, 您将创建一个循环,循环说多次“Hello”。

下面显示了完整的Welcome.cshtml文件。

@{
ViewBag.Title = "Welcome";
}
<h2>Welcome</h2>
<ul>
@for (int i = ; i < ViewBag.NumTimes; i++)
{
<li>@ViewBag.Message</li>
}
</ul>

运行应用程序,并浏览下面的 URL : http://localhost:xx/HelloWorld/Welcome?name=Scott&numtimes=4

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

在上面的示例中,我们使用了ViewBag对象把数据从控制器传递给了视图。在本系列教程后面的文章中,我们将使用视图模型来将数据从一个控制器传递到视图中。用视图模型来传递数据,这一般是首选的办法。Blog Dynamic V Strongly Typed Views 有更加详细的介绍。

到这里,这是一种"M"模型,但不是数据库的那种“M”模型。让我们来创建一个电影数据库吧。

学习了本节内容,才能更好的理解数据是如何从控制器传递到视图显示的。在掌握这些MVC知识的同时,也可以借助一些开发工具来帮助开发过程。ComponentOne Studio ASP.NET MVC 这款轻量级控件能与Visual Studio无缝集成,完全与MVC6和ASP.NET 5.0兼容,将大幅提高开发效率。

-----------------------------------------------------------------------------------------

《ASP.NET MVC 5 入门指南》12篇文章汇总如下:

1. ASP.NET MVC 5 - 开始MVC 5之旅

2. ASP.NET MVC 5 - 控制器

3. ASP.NET MVC 5 - 视图

4. ASP.NET MVC 5 - 将数据从控制器传递给视图

5. ASP.NET MVC 5 - 添加一个模型

6. ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB

7. ASP.NET MVC 5 - 从控制器访问数据模型

8. ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

9. ASP.NET MVC 5 - 给电影表和模型添加新字段

10. ASP.NET MVC 5 - 给数据模型添加校验器

11. ASP.NET MVC 5 - 查询Details和Delete方法

12. ASP.NET MVC 5 - 使用Wijmo MVC 5模板1分钟创建应用

希望这些文章对感兴趣的朋友有所帮助,另附上PDF版的汇总文档:

ASP.NET MVC 5 入门指南》PDF版

相关阅读:

微软 Build 2017 开发者大会:Azure 与 AI 的快速发展

是什么让C#成为最值得学习的编程语言

从Visual Studio看微软20年技术变迁

C#开发人员应该知道的13件事情

Visual Studio 2017正式版发布全纪录

ASP.NET MVC 5 - 将数据从控制器传递给视图的更多相关文章

  1. [转]ASP.NET MVC 5 - 将数据从控制器传递给视图

    在我们讨论数据库和数据模型之前,让我们先讨论一下如何将数据从控制器传递给视图.控制器类将响应请求来的URL.控制器类是给您写代码来处理传入请求的地方,并从数据库中检索数据,并最终决定什么类型的返回结果 ...

  2. MVC 5 - 将数据从控制器传递给视图

    MVC 5 - 将数据从控制器传递给视图 在我们讨论数据库和数据模型之前,让我们先讨论一下如何将数据从控制器传递给视图.控制器类将响应请求来的URL.控制器类是给您写代码来处理传入请求的地方,并从数据 ...

  3. ASP.NET MVC 5 学习教程:控制器传递数据给视图

    原文 ASP.NET MVC 5 学习教程:控制器传递数据给视图 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字 ...

  4. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  5. 【ASP.NET MVC系列】数据验证和注解

    [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...

  6. ASP.NET MVC中将数据从Controller传递到视图

    ASP.NET MVC中将数据从Controller传递到视图方法 1.ViewData ViewData的类型是字典数据,key-value 如:ViewData["Data"] ...

  7. vs 2013下自定义ASP.net MVC 5/Web API 2 模板(T4 视图模板/控制器模板)

    vs 2013下自定义ASP.net MVC 5/Web API 2  模板(T4 视图模板/控制器模板): Customizing ASP.NET MVC 5/Web API 2 Scaffoldi ...

  8. 9、ASP.NET MVC入门到精通——Controller(控制器)

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 Controller主要负责响应用户的输入.主要关注的是应用程序流,输入数据的处理,以及对相关视图(View)输出数据的提供. 继承自:Sy ...

  9. ASP.NET MVC 5 入门教程 (2) 控制器Controller

    文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-controller.html 上一节:ASP.NET MVC ...

随机推荐

  1. git 的基本使用

    git 的使用步骤: 1. 新建一个文件夹,然后进入终端, 2. cd <文件夹路径>  ——->进入当前目录: 2.psw    ————>查看当前路径 3.git init ...

  2. 收集常用的.net开源项目

    Json.NET http://json.codeplex.com/ Json.NET是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Lin ...

  3. CollectionView水平和竖直瀑布流的实现

    最近在项目中需要实现一个水平的瀑布流(即每个Cell的高度是固定的,但是长度是不固定的),因为需要重写系统 UICollectionViewLayout中的一些方法通过计算去实现手动布局,所以本着代码 ...

  4. 单独编译使用WebRTC的音频处理模块

    块,每块个点,(12*64=768采样)即AEC-PC仅能处理48ms的单声道16kHz延迟的数据,而 - 加载编译好的NS模块动态库 接下来只需要按照 此文 的描述在 android 的JAVA代码 ...

  5. EditText取消自动调用键盘事件(方法之一)

    直接上代码,这只是其中一种方法: 重点在于是在该EditText的父空间中设置 <LinearLayout android:layout_width="match_parent&quo ...

  6. log4j:WARN Please initialize the log4j system properly 问题解决

    log4j:WARN No appenders could be found for logger (com.netease.qa.testng.TestngRetry).log4j:WARN Ple ...

  7. 浅谈CSS hack(浏览器兼容)

    今天简单写一点关于浏览器兼容的处理方法,虽然百度上已经有很多,但是我还是要写! 先看一个图 这个图描述了2016年1月至8月网民们所使用的浏览器市场份额(来源:http://tongji.baidu. ...

  8. Shader实例:NGUI图集中的UISprite正确使用Shader的方法

    效果: 变灰,过滤,流光 都是UI上常用效果. 比如: 1.按钮禁用时,变灰. 2.一张Icon要应付圆形背景框,又要应付矩形背景框.就要使用过滤的方式来裁剪. 避免了美术提供两张icon的麻烦,又节 ...

  9. 关于C#开发WEB项目TextBox控件的自适应高问题解决办法!

    前两天做WEB开发时候遇到了一个小问题TextBox 控件要根据输入的内容多少自动改变大小,并且这个大小要求是在本页面内最大化.也就是 Width="100%" Height=&q ...

  10. C# 对多个文件进行zip压缩

    本文使用的ICSharpCode.SharpZipLib.dll类库来实现文件压缩,你可以通过Nuget来安装此类库,或者到搜索引擎去搜索一下遍地都是.类库下载下来之后,添加到项目引用就可以了.下面这 ...