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

在我们讨论数据库和数据模型之前,让我们先讨论一下如何将数据从控制器传递给视图。控制器类将响应请求来的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 = 1)
{
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 = 0; 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”模型。让我们来创建一个电影数据库吧。

posted on 2014-04-29 16:18 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3699486.html

ASP.NET MVC 5 - 将数据从控制器传递给视图相关推荐

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

    起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控制器访问模型的数据 生成的代码详解 使用 SQL Se ...

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

    原文:ASP.NET MVC 5 入门教程 (2) 控制器Controller 文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get ...

  3. Tuple解决在视图中通过razor获取控制器传递给视图的匿名对象的报错问题

    C#的编译器总是将匿名类型编译成internal的,当在视图中直接使用控制器传递的匿名对象时就会报错 错误代码: 控制器代码 视图代码 执行结果: ************************** ...

  4. mvc5控制器修改html,ASP.NET MVC Razor:如何在控制器动作中呈现Razor局部视图的HTML...

    我看到有人想知道如何为另一个控制器执行此操作. 就我而言,我的所有电子邮件模板都位于Views / Email文件夹中,但是您可以对其进行修改以传递与之关联了视图的控制器. public static ...

  5. 关于asp.net mvc中的cookie的对象传递以及加密解密

    普通使用:http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html 加密使用:http://www.cnblogs.com/zjyp ...

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

    在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...

  7. ASP.NET MVC 5 入门指南汇总

    原文:ASP.NET MVC 5 入门指南汇总 经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章 ...

  8. Asp.net MVC 教程汇总

     自学MVC看这里--全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想 ...

  9. ASP.NET MVC 教程学习

    1. Why :为什么需要ASP.NET MVC 本章主要为大家汇总了为什么学习Asp.net MVC替代WebForms,产生ASP.NET MVC 的需求是什么,只有更好的理解了为什么需要MVC, ...

最新文章

  1. ue4 函数和宏区别_【UE4】通俗易懂 用蓝图来学习 C++ 基础知识
  2. .net中的SelectList在Html.DropdownList中的使用
  3. Linux提高工作效率的命令
  4. 实现ABAP条件断点的三种方式
  5. elementui源码_Element UI 终于还是来啦
  6. vscode编辑器 装JavaScript Standard Style 遇到不检测代码问题
  7. JavaScript之数组去重
  8. python学习手册-python学习手册第5版pdf
  9. el-select 默认选中url参数对应的选项
  10. Oracle(plsql)数据导入导出
  11. Mac安装wget流程及异常解决
  12. 漫话:什么是架构师?
  13. 微信小程序上传照片并且预览
  14. 交通分析小区TAZ生成——以武汉市为例
  15. 图像处理(十一)高斯差分算法(边缘检测)
  16. 游戏动画中有哪些动画原理?
  17. 手机如何远程控制和监控PLC
  18. 让你秒懂的Lambda表达式超级详细讲解
  19. 大内存PDF文件转Word免费之道
  20. Ubuntu 10.04 安装声卡驱动

热门文章

  1. MySQL第11天:MySQL索引优化分析之性能分析
  2. stm32f10x_it.c 定义的程序列表模板(stm32f103x_it.c中放的是中断的空函数)
  3. 跟着 Alex 学python 1.安装
  4. 开源性能测试工具JMeter快速入门(一)
  5. Memcached实战之复制----基于repcached的主从
  6. Myeclipse报错--Animation Start An internal error has occurred. java.lang.NullPointerException解决...
  7. 初探 Headless Chrome
  8. HTML5 Web 客户端五种离线存储方式汇总
  9. NUC_HomeWork1 -- POJ1088(DP)
  10. SQL Server 2008最直观的变化上(三)