zoukankan      html  css  js  c++  java
  • MVC3--View层

         Razor二义性:

           1,当view层中出现   邮件格式时候比如   anbylau2130@qq.com 这种情况Razor将会出现多义性

           可以使用@@来转义为一个@字符,

           如:<p>you must follow @james,@jessica,@Andy</p>   这里Razor会以变量的形式解释james,jessica,andy,

              这不是我们想要的效果,所以可以使用@@来转义<p>you must follow @@james,@@jessica,@@Andy</p>

           但是Razor内部做了一般邮箱的识别,

           如:item_@items.Length可能会识别为邮箱地址,那么这时可以在后面加上item_(@items.Length)来计算后面的值

    Html编码

      1, Razor表达式是Html编码的

       {

         @string message ="<script>alert('warning')</script>"

        }

        <div>@Message</div>                  这里就不会弹出对话框,而是编码后的html文本

      如果要显示一个对话框

              1,可以使用HtmlString的实例,

              2,可以使用@Html.Raw(message)

      应尽可能的避免脚本注入

     2,如果要在脚本中使用Razor语法,那么最好的解决方案便是   使用@Ajax.JavaScriptStringEncode(ViewBag.UserName)

     代码块

      @foreach(var item in lst)

        {

             <li>this is @item</li>

        }

       @{

               语句

          }

     注释:@**@

       布局

       @{layout=~/Views/Shared/SiteLayout.cshtml}

       @RenderBody()相当于web form中的Placehold控件

       @RenderPatitial() 进行部分视图的绘制

       如果Layout也中定义 <footer>@RenderSection("Footer")</footer> 

        在布局页中使用

        如:index.cshtml中使用以下标签来呈现用户的内容

      @section Footer{
      this is a footer
      }

       footer节点是可选择的如:<footer>@RenderSection("Footer",false)</footer>

    也可以如下方法  
    <footer> @if (IsSectionDefined("Footer")) { RenderSection("Footer"); } else { <p>has no section</p> }
    </footer>

        

     如果在controller中直接返回PartialView(); 那么,视图中将不加载任何布局_Layout.cshtml文件中的内容

    在下面的布局中为了减少代码的冗余,采用这种方式
    
    _Layout.cshtml中
    @if (ViewBag.Header
    == 1) { <script type="text/javascript" src="/js/jquery.loadmask.min.js"></script> } else { <script type="text/javascript" src="/js/jquery.js"></script> } index.cshtml中则在布局头部使用 @{ Layout = "~/Views/Shared/_Layout.cshtml"; ViewBag.Header = 1; } 来加载相应的视图内容

    当将分布视图加载带某个页面时可以使用以下方法

    <div id="result"></div>
    <script>
    $(function(){
      $("#result").load('home/message');
    });
    </script>

    配置加载视图引擎

    protected void Application_Start()
    {
        ViewEngines.Engines.Clear();
        ViewEngines.Engines.Add(new myviewEngine()) ;
        RegisterRoutes(RouteTable.Routes);
    }
    Engines是一个静态的ViewEnginesCollection,Razor引擎和WebForm引擎默认是存在的,所以要先Clear()

    查找视图

    在创建一个自定义视图引擎的时候,IViewEngines要实现一个关键的接口

      public interface IViewEngine 
       { 
            ViewEngineResult FindView(ControllerContext controllerContext, string viewName,  string masterName, bool useCache);  
            ViewEngineResult FindPartialView(ControllerContext controllerContext,  string partialViewName, bool useCache); 
            void ReleaseView(ControllerContext controllerContext, IView view); 
        } 
    FindView,仅在已注册的视图引擎中迭代并调用每一个视图引擎的FindView,然后指定视图名称传递过来,然后ViewEnginesCollection询问每个视图引擎是否可以渲染当前的视图
    ViewEngineResult  中存储了是否可以渲染当前视图的答案
    view,返回与指定名称对应的并可以找到的Iview实例,如果找不到,返回null
    viewEngines,如果能找到一个符合要求的视图,就返回一个IviewEngine实例,否则返回null
    searchedlocations返回一个IEnumerable<String> ,其中包含视图引擎搜索到的所有位置、

    在实现自定义引擎时Iview接口是需要实现的第二个接口
    public interface IView
    { 
        void Render(ViewContent viewcontent,TextWriter txtwriter);
    ViewContent 提供自定义视图用到的信息,
    HttpContext  封装了asp.net内部对象server,session,request,response
    Controller 提供视图引擎的控制器访问
    RouteData 对当前路由的访问
    ViewData 包含了从Controller传递到视图的数据
    TempData 包含了再特殊的单个请求缓存中的数据,由controller传递给视图
    View Iview的一个实例。用于渲染
    ClientValidationEnable 是否开启客户端数据验证
    FormContext 包含客户端验证的窗体信息
    FormIdGenerator 允许重写窗体的命名风格
    IsChildAction 只是操作是否作为调用Html.Action或者Html.RenderAction
    ParentActionViewContext 当IsChildAction==true,包含当前视图的fu视图的ViewContext
    Writer HtmlTextWriter使用不返回Html的辅助方法(Html.Form)以便与非WebForm视图兼容

    ActionResult还是ViewEngine
    原则:它是否对拥有可以知道如何渲染标记的模板文件有意义,如果只有一种方式可以把对象转换为输出格式,那么编写自定义的ActionResult更有意义

     

        

  • 相关阅读:
    系统调用简单总结
    系统调用原理详解
    总结:c 语言与Linux操作系统的关系
    poj3171 Cleaning Shifts
    洛谷P1032 字串变换
    poj3662 Telephone Lines
    洛谷P1073 最优贸易
    Uva1330/poj1964 City Game
    poj2559/SP1805 Largest Rectangle in a Histogram
    洛谷 P1196 [NOI2002]银河英雄传说
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3524265.html
Copyright © 2011-2022 走看看