MVC视图简单介绍(内部使用)

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

 

原文地址:https://www.cnblogs.com/linsong521/p/4762812.html