我要学ASP.NET MVC 3.0(六): MVC 3.0创建你的View视图
概述
在模型-视图-控制器 (MVC) 模式中,视图专门用于封装呈现逻辑。 这些视图不应包含任何应用程序逻辑或数据库检索代码。 所有应用程序逻辑都应该由控制器进行处理。 视图使用从控制器传递给它的数据来呈现相应的 UI。 此数据是使用 View 方法从控制器操作方法中传递给视图的。
在 MVC Web 应用程序的普通工作流中,控制器操作方法将处理传入的 Web 请求。
这些操作方法使用传入的参数值执行应用程序代码以及检索或更新数据库中的数据模型对象。 然后,这些方法会选择一个将响应呈现到浏览器的视图。
MVC 3.0视图引擎
MVC 3.0为我们提供了两种视图引擎ASPX(C#)和Razor(CSHTML)
ASPX(C#)引擎
ASP.NET MVC 框架支持使用视图引擎生成视图 (UI)。 默认情况下,MVC 框架使用从现有 ASP.NET 页面 (.aspx)、母版页 (.master) 和用户控件 (.ascx) 类型中继承的自定义类型(ViewPage、ViewMasterPage 和 ViewUserControl)作为视图。
Razor(CSHTML)引擎
_appstart.cshtml :
应用程序启动时在Global. Application_Start方法后执行。
用于进行App的初始化时,需要进行处理的内容.例:向数据库记录系统初始化的一些信息。
功能与Global.Application_Start类似,差别在于:Global的Start先执行,然后在到该_appStart,值得注意的是在_appStart上下文中可以使用.NET4的dynamic新特性~~在声明中,作为属性、字段、索引器、参数、返回值或类型约束的类型。
_Layout.cshtml:
布局页面即和aspx的母版页相似。
创建MVC视图(Razor引擎)
建立一个基于Razor引擎空的MVC 3.0空应用程序
选择空项目模板和Razor视图引擎
新建一个Controller命名为HomeController
鼠标右击 Controller文件夹
输入Controller名称。注意必须以Controller结尾。
添加完控制器后默认给出了起Index的方法。。。
此时我们没有创建对该Action对应的View,所以View是红色的。。。运行时界面会报错。。
public ActionResult Index()
{
return View();
}
我们先让他输出一个字符串到页面。。。
将代码
public ActionResult Index()
{
return View();
}
修改为
public string Index()
{
return "Hello World";
}
运行之后 一个简单的界面就出现了 。。。
添加View
此时我们只是单纯的显示了一些字符串而已。但是我们的界面还需要很多元素不仅仅是文字。。
所以我们还是得从View视图下手。。
返回到前面的
public ActionResult Index()
{
return View();
}
修改前面的代码让Controller的Index返回一个ActionResult
对于ActionResult请参见:我要学ASP.NET MVC 3.0(五): 入手Controller/Action
右击该Action弹出窗体 ---选择添加视图
建议不要修改视图名称,后续会慢慢解释
此时在View文件夹中会对应Controller生成一个Action对应的View视图
在视图里面编写html代码
@{
ViewBag.Title = "主页";
}
<h2><a href="Index">Hello World</a></h2>
public ActionResult Index()
{
ViewData["Message"] = "Hello World";
return View();
}
View修改为
@{
ViewBag.Title = "主页";
}
<h2><a href="Index">@ViewData["Message"]</a></h2>
运行效果还是一样的。。。
关于TempData 、ViewBag和ViewData
其实我个人觉得他们都是一样的。
如果你使用的TempData 、ViewData用ViewBag的方式调用也是一样的效果
反之亦然。。。
例如:ViewBag.Message和ViewData["Message"]
public ActionResult Index()
{
ViewBag.Message = "Hello World";
// ViewData["Message"] = "Hello World";
return View();
}
View代码不变运行效果一样。。。反复调试效果都是一样的。。
TempData、ViewData和ViewBag异同:
作者:记忆逝去的青春
出处:http://www.cnblogs.com/lukun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过http://www.cnblogs.com/lukun/ 联系我,非常感谢。