• mvc 4 razor语法讲解和使用


    1.这里的  @{Layout="文件路径";}  代码块指定了整个项目默认所使用的布局文件(如图:)

    @RenderBody()对于所有的页面默认的情况下都会使用这个布局(WebForm的模板)

    @RenderBody()相当于一个占位符其他页面的所有内容都会被引擎渲染在这个地方。

    @RenderSecion()这个占位符表示:在这里会渲染页面里面的一个节(可以是html代码也可以是c#代码和Html的结合体)。

     

    @RenderSection("scripts", required: false)做一个补充说明,第一个参数指明:在子页面被渲染的节的名称,第二个参数:指定子页面这个节是否是必需的,如果指定了required:true;但是在子页面没有给这个名称的节的话,编译是通不过的。

     

    Razor语法的分类

    @using : 引入命名空间

    @model :声明强类型的数据model类型

    @section :定义要实现母版页的节的信息

    @RenderBody():当创建基于页面的布局时,视图的内容会和布局页合并,而新创建的视图的内容会通过布局页面的@RenderBody方法呈现在标签之间。

    @RenderPage :呈现一个页面。比如网页中固定的头部可以单独放在一个共享视图文件中,然后在布局也免中通过这个方法调用,例如 @RenderPage("~/Views/Shared/_Header.cshtml"

    @RenderSection:布局页面还有节点(section)的概念,便于局部呈现

    1.行内(inline)C#(服务器端代码)形式(行内代码

    @变量例如:@User.Name,变量或属性结束后,任何形式文本或者标签都自动被解析为html,如遇结束判断有歧义,请加括号如下

    @( 表达式 )  例如:@(i + 1) 或 @(User.Name)    括号里面为:表达式,或者变量

    @方法调用  例如:@Html.TextBox("UserName").ToString()

    2. 代码块

    第一种情况:

    @{ 代码块 }

    @if (条件) { 代码块 }

    @switch (条件) { 分支匹配代码块 }

    @for (循环控制) { 代码块 }

    @foreach (循环控制) { 代码块 }

    @while (循环控制) { 代码块 }

    @do { 代码块 } while (循环控制) 『 代码块里面的代码要严格按照c#语法来,每行结束必需有分号』

    第二种情况:(代码块中的文本或者Html客户端标签)

    单行文本

    @:行内文本 换行的话自动变成了C#服务器端代码。

    多行文本 

    任何标签对 例如:<div>多行文字</div>

    任何自闭合标签 例如:<img 多行属性 />

    纯文字使用伪标签<text> 例如:<text>多行文字,两侧标签不会被输出</text>

    3.其他

    电子邮箱可以自动识别,例如:123456@qq.com

    被误认为是电子邮箱的请加括号(),例如:123456(@UserName)

    要输出商标版权等的,请用@字符转义,例如:@@ →会输出单个字符@

    HtmlHelper和AjaxHelper

    Html.BeginForm的两种写法:

    第一种使用Using语句:

    1
    2
    3
    4
    using(Html.BeginForm())
    {
      
     }

    第二种使用代码块闭合的形式(注意form是代码块形式的不是行内代码:所以结尾必需有分号)

    1
    2
    3
    {Html.BeginForm();} 
     
    {Html.EndForm();}

    Ajax.BeginForm()的写法只有一种:因为我并没有看到Ajax.EndForm()。呵呵估计是微软的开发团队开发Razor引擎的时候漏掉了

    1
    2
    3
    4
    using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId="",OnSuccess=""})) 
    {
     
    }

    这里要想Ajax的Form有效的话我们必须在view页面引入支持Ajax的Js脚本。如下:

    1
    Scripts.Render("~/bundles/jqueryval")

    这个是微软的脚本捆绑技术,实际上捆绑的就是(以下的JS代码)

    图片1.jpg

    不难看到其中就有ajax的Javascript脚本

    对于AjaxForm的提交参数的指定:

    当异步请求成功时,会去使用后端返回的内容局部更新UpdateTargetId所指定的客户端的html标签内容,然后调用OnSuccess指定的客户端的JS方法。

    具体参数说明可以参照MSDN

    OnSuccesshttp://msdn.microsoft.com/zh-cn/library/system.web.mvc.ajax.ajaxoptions.onsuccess(v=vs.108).aspx

    对于Razor智能感知的一点补充

    在微软的cshtml页面,@后面跟一些对象的时候会自动出现智能感知

    图片2.jpg 

    当我们自定义一个类,让后想让这个类在Razor引擎有只能感知能力的时候。我们可以找到

    Views/Web.config文件,打开文件我们会发现如下的节点:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <system.web.webPages.razor>  
       <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />  
      <pages pageBaseType="System.Web.Mvc.WebViewPage">  
         <namespaces>  
           <add namespace="System.Web.Mvc" />  
           <add namespace="System.Web.Mvc.Ajax" />  
           <add namespace="System.Web.Mvc.Html" />  
           <add namespace="System.Web.Optimization"/>  
           <add namespace="System.Web.Routing" />  
         </namespaces>  
       </pages>  
     </system.web.webPages.razor>

    我们只要把我们的类所在的命名空间添加进去就可以了。

     

    Razor的一些实用功能(极大的灵活性)

    Partial Page Output Caching(部分页输出缓存)

    我们可以使用@Html.Action()来请求一个处理方法,并将放返回的Model或者ViewModel对象渲染到页面。

    图片3.jpg

    图片4.jpg

    通过使用OutputCache特性,我们实现了对对象的缓存。因此当发生重复请求时,就可以自动输出缓存信息避免频繁查询数据库,减轻服务器负担和提高响应速度

     

  • 相关阅读:
    ASP.NET Core Docker部署
    Asp.net core WebApi 使用Swagger生成帮助页实例
    C#图片文字识别
    C#实现rabbitmq 延迟队列功能
    Windows下当地RabbitMQ服务的安装
    看大数据时代下的IT架构(1)业界消息队列对比
    查看sqlserver被锁的表以及如何解锁
    如何让win2008服务器显示中文无乱码
    Lucene.Net的服务器封装+APi组件 (开源)
    Oracle学习系列4
  • 原文地址:https://www.cnblogs.com/wdcwy/p/5359606.html
Copyright © 2020-2023  润新知