zoukankan      html  css  js  c++  java
  • ASP.NET MVC5 高级编程 第3章 视图

    参考资料《ASP.NET MVC5 高级编程》第5版

    第3章 视图

    3.1 视图的作用

    视图的职责是向用户提供界面。

    不像基于文件的框架,ASP.NET Web Forms 和PHP ,视图本身并不被访问,浏览器,并不能直接指向一个视图并渲染它。相反视图被控制器渲染,因为控制器提供了渲染所需要的数据。

    一般情况下,控制器需要向视图提供一些信息,所以这会传递一个数据转移对象,叫做模型。完成这一过程需要两部分操作,其中一个是检查由控制器提交的模型对象,另一个是将其内容转化为HTML格式。

    3.2 视图的基础知识

    在最简单的情况中,向控制器发送一个请求,控制器返还一个视图。

    3.3 理解视图约定

    eg1:约定可以重写

            public ActionResult Index(){return View("notIndex");}
    
        

    eg2:指定完全不同目录结构中的视图

            public ActionResult Index(){return View("~/Views/Example/Index.cshtml");}
    
        

    tips

    在使用这种语法时,必须提供视图文件的文件扩展名

    3.4 强类型视图

    3.4.1 ViewBag

    eg1:通过重载的View 方法传递模型实例来指定模型

            public ActionResult Index(){ var a=0;return View(a);}
            
        

    告知试图正在使用哪些类型的模型需要使用 @model 来声明。

    对于在视图中经常使用的名称空间,可以在Views 目录下的Web.config 文件中声明。

    3.4.2 理解ViewBag、ViewData 和 ViewDataDictionary

    从技术角度来讲,数据从控制器推送到视图实际上是使用了一个ViewData 的ViewDataDictionary。

    我们可以通过标准字典语法设置或读取其中的值

    ViewData["CurrentTime"]=DateTime.Now;
        

    ViewBag 是ViewData 的动态封装器。它利用了dynamic 关键字。ViewBag.CurrentTime 等同于 ViewData["CurrentTime"]

    ViewData["CurrentTime"]=DateTime.Now;
        

    3.5 视图模型

    eg1:通过ViewBag 填充下拉列表

     
    例一:
    
    view 层:
     
                                                @Html.DropDownList("ClassID")
    
    
    Controller 层:
    
    ViewBag.ClassID=new SelectList(cb.GetClassModels(),"ID","ClassName");
    
    
    
    
    例二:
    
    view 层:
     
                                                @Html.DropDownList("TerSystem")
    
    
    Controller 层:
    
     
    
                List AllFieldValue = new List();
                List<sys_fieldvalue> sfv = m_Dic.GetOrderByDictionarys("TerminalSystem", "", "", ref msg);
                if (sfv != null)
                {
                    for (int i = 0; i < sfv.Count(); i++)
                    {
                        AllFieldValue.Add(new SelectListItem { Text = sfv[i].V_Text + " ", Value = sfv[i].V_Code });
                    }
                }
                ViewBag.TerSystem = new SelectList(AllFieldValue, "Value", "Text");
    
    
            
        

    3.6 添加视图

    通过视图基架模型来构建模型和创建基架视图。

    3.7 Razor 视图引擎

    3.7.1 Razor 的概念

    Razor 是默认的视图引擎。Razor 为视图表示提供了一种精简的语法,最大限度的减少了语法和额外的字符。

    3.7.2 代码表达式

    Razor 中的核心转化字符是"at"符号(@)。有两种基本类型的转换:代码表达式和代码块。

    3.7.3 HTML 编码

    Razor 表达式是使用HTML 自动编码的。

    可以通过创建一个HtmlString 的实例或Html.Raw便捷方法来展示不编码的HTML标记

    当在JavaScript 中将用户提供的值赋给变量时,要使用@Ajax.JavaScriptStringEncode 方法对用户输入进行编码。

    3.7.4 代码块

    代码块中的语句(如foreach和if)是不需要使用花括号的

    可以通过创建一个HtmlString 的实例或Html.Raw便捷方法来展示不编码的HTML标记

    3.7.5 Razor 语法示例

    1,隐式代码表达式

    @model.message

    2,显式代码表达式

    @(model.message)

    3,无编码代码表达式

    html.raw

    4,代码块

    @{}

    5,文本与标记相结合

    @{<@(model.message)>}

    6,混合代码与纯文本

    @if(1>0){<@(model.message)>}

    7,转义代码分割符

    @@

    8,服务器端的注释

    @*{<@(model.message)>}*@

    9,调用泛型方法

    3.7.6 布局

    Razor 视图有助于使应用程序中的多个视图表示一致的外观。

    可使用布局为网站定义公共模板。公共模板包括一个或多个占位符,应用程序中的其它视图为它提供内容。

    视图中的@RenderBody 调用表示一个占位符,用来标记这个布局的视图将渲染它们的主要内容的位置。

    视图中可能有多个RenderSection ,默认情况下,视图必须为布局定义的每个RenderSection 提供相应内容。@RenderSection("Footer")

    RenderSection 方法有一个重载版本,允许制定不需要的节。@RenderSection("Footer",require:false)

    判断RenderSection 是否有定义:IsSectionDefined 方法

    3.7.7 ViewStart

    Views目录下的_ViewStart.cshtml文件,指定了一个默认布局。代码先于任何一个视图运行,我们可以在它里面对共同的视图配置进行统一设置。

    3.8 指定部分视图

    不渲染布局。

    3.9 小结

    视图引擎用途非常有限。它们的目的是获取从控制器传递给它们的参数,并生成格式化的输出。

  • 相关阅读:
    Go语言之Go语言文件处理
    Go语言之Go语言网络编程
    Go语言之Go语言并发
    Go语言之Go语言锁机制
    Go语言之Go语言 异常处理与测试
    Go语言之Go语言反射
    Go语言之Go 语言方法
    Go语言之递归函数
    js 改变文章字体大小
    .net获取当前url各种属性(文件名、参数、域名、端口等)的方法(转)
  • 原文地址:https://www.cnblogs.com/llchang/p/5370514.html
Copyright © 2011-2022 走看看