上一章说到了Controller,并且返回了字符串类型,但是用户界面往往不是简单的字符串可以满足的,所以MVC就有了视图(View)
视图的职责是向用户提供用户界面的,
下面我们新建一个View
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Sample</title> @ViewBag.Mes </head> <body> <div> </div> </body> </html>
这个视图非常简单 只是通过ViewBag来返回一个文字
下面我们来说一下如果从控制器中指定视图
public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { ViewBag.Mes = "Hello"; return View("Sample"); } }
这是一个简单的控制器在里面为Mes幅值之后返回到了Sample的视图中,这里不需要后缀
我们可以看到MVC的Controller基类中含有多种View的重载
protected internal ViewResult View(IView view); protected internal ViewResult View(object model); protected internal ViewResult View(string viewName); protected internal virtual ViewResult View(IView view, object model); protected internal ViewResult View(string viewName, object model); protected internal ViewResult View(string viewName, string masterName); protected internal virtual ViewResult View(string viewName, string masterName, object model);
可以根据自己的实际要求去访问,在上面的方法中我们特定指定了一个返回视图Sample
假如我们没有指定视图Controller会如何匹配视图呢,首先它会去找相同目录Home下的Index名称的视图,如果寻找不到就会报错
在一些情况下我们会指定不同目录下的视图 我们可以用全路径“~”来标示
return View("~/Views/Example/Index.cshtml");
这里必要用后缀名
ViewData和ViewBag
数据从控制器传入视图是通过ViewData的ViewDataDictionary(这是特殊的字典类) 我们可以使用标准的字典语法来设置 或者 取值
VewData["name"]="Linsong";
ViewBag就是ViewData的动态封装器,我们可以更方便的使用ViewBag
ViewBag.name=“Linsong”;
其实就理论来说2中表达方式还是无太大差异的,ViewBag更方便一些,更收欢迎一些
但是之前的差异我们还是要知道的
(1)首先 ViewBag后面必须跟同标准的C#字符
例如 ViewData[“L song”] 这种在ViewData可以用 ViewBag不可以
(2)动态值不能当做方法参数,这时候要用ViewData 或者讲ViewBag强制转换 (string)ViewBag
强制类型视图
我们新建视图的时候可以选择类型 或者不限则类型 在页面上的定义@model +类型 来实现强类型
Razor
razor中有一些特定的表达方式支持html javascript css
@Model.属性 单行代码块
@{} 多行代码块
@*标题房源发布时间等 结束*@ 注释
razor中都是用html编码过的,如果输入标签等内容 @Html.Raw(内容) 来不被编码
在代码块中并且没有被标签包住的中文可以用@: 或者<text>内容</text> 否则报错