上一章说到了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> 否则报错