zoukankan      html  css  js  c++  java
  • mvc 4 Razor (@html.xx)语法大全以及应用

    Razor语法大全

     @Html

    ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction差别


    对这四个的差别做一个总结,清理一下思路,便利今后应用:

    @Html.Action

    1、Html.ActionLink("linkText","actionName")

    第一个参数:要显示的文本,第二个参数:视图名
    例如:<%=Html.ActionLink("跳转到About页面", "About");%> → <a href="/Home/About">跳转到About页面</a>

    2、Html.ActionLink("linkText","actionName","controlName")
    第一个参数:要显示的文本,第二个参数:视图名, 第三个参数:控制器名
    例如:<%= Html.ActionLink("跳转到别的controler中", "Index", "Home");%> →<a href="/
    Home/Index
    ">跳转到别的controler中</a>

    3、
    Html.ActionLink("linkText","actionName",routeValues)
    第一个参数:要显示的文本,第二个参数:视图名, 第三个参数:url中的参数
    例 如:<%=Html.ActionLink("跳转到About页面", "About", new { id = "1", name = "x" }) %> → <a href="/Home/About/1?name=x">跳转到About页面</a>

    4、
    Html.ActionLink("linkText","actionName",routeValues,htmlAttributes)
    第一个参数:要显示的文本,第二个参数:视图名, 第三个参数:url中的参数,第四个参数:设置标签属性
    例 如:<%=Html.ActionLink("跳转到About页面", "About", new { id = "1", name = "x" }, new { disabled = "disabled",@class = "about"})%>  → <a class="about" disabled="disabled" href="/Home/About/1?name=x">跳转到About页面</a>

    注意:设置标签的class属性时,应在class前加上@,因为class是关键字。

    上文中的<%= %> 都可以换成
    <%: %> 

    “<%:%>” 和 “<%=%>” 的区别:
    <%: %>对其中内容进行htmlEncode编码了,可以防止跨站脚本攻击(即:XSS攻击)。

    <%:<div>显示div<div> %> → 
    <div>显示div<div>  而 
    <%= <div>显示div<div> %> → 
    显示div

    <%: %>中用函数时,该函数一定要有返回值,否则,会报错。

    http://www.mamicode.com/info-detail-1244382.html 

    使用方法:@Html.Action(action, controller)
    加载局部页面。
    例如在模板页中使用:@Html.Action("Contact", "Company")
    在CompanyController中有如下方法:
    public PartialViewResult Contact()

    {
       return PartialView();
    }

    1、带有Render的办法返回值是void,在办法内部进行输出;不带的返回值类型为MvcHtmlString,所以只能如许应用:
        @Html.Partial 对应 @{Html.RenderPartial(....);}
        @Html.Action 对应 @{Html.RenderAction(....);}


    2、Action、RenderAction加载办法的视图,履行Controller → Model → View的次序,然后把产生的页面带回到本来的View中再回传。而Partial、RenderPartial直接加载视图文件内容


    3.  Html.Partial可以直接供给用户控件名作为参数,而Html.Action须要有对应的Action,在Action内部返回PartailResult(即retun PartialView())。


    4、对于简单的没有任何逻辑的用户控件,推荐应用Html.Partial;对于须要设置一些Model的用户控件,推荐应用Html.Action。当然,有Model数据也是可以应用Html.Partial办法的,可以看办法的重载。


    5、应用Html.Action有个益处,就是可以按照不合的场景选择不合的用户控件。比如:
    @Html.Action("UserInfoControl")
    在对应的UserInfoControl这个Action中,在用户未登录的时辰,可以retun PartialView("LogOnUserControl");登录后,可以retun PartialView("UserInfoControl");

        

    更多:关注:http://blog.csdn.net/hcf_force/article/category/1872009

     本文页面来源地址:http://www.cnblogs.com/dengxinglin/p/3352078.html

    Razor是基于framewor4以上写的一个开源项目:https://github.com/Antaris/RazorEngine/

    Razor是包含了模板引擎和动态编译两部分。本部分就简单记录了模板引擎的一些语法,之后用Razor做一个代码生成器,就使用Razor的语法来。

    Razor的发布是和MVC一起的,作为MVC的视图模板引擎。

    Razor文件类型

       Razor可以在vb.net和C#中使用。分别对应了两种文件类型,.vbhtml和.cshtml 

    Razor的标识符

        @字符被定义为Razor服务器代码块的标识符,后面的表示是服务器代码了。web form中使用<%%>中写服务器代码一个道理。在vs工具里面提供了代码着色和智能感应的功能。如下面代码:

    @{string userName= "邓星林";}
        <span>@userName</span>
        <span>@DateTime.Now.ToString("yyyy-MM-hh")</span>

    Razor的作用域

         在上面一个例子中都已经使用到了大括号{},不错,大括号里面的就是表示作用域的范围,用形如@{code}来写一段代码块。

    @{
        string userName= "邓星林";
        @userName
    }

    在作用域(代码块)中输出也是用@符号的。

    用Razor和html代码混合编写

       在Razor中写html代码和html代码中写Razor语句都是可以的,并且还有智能提示。

       a.在作用域内如果是以html标签开始则视为文本输出

       b.如果要输出@,则使用@@

       c.如果要输出非html标签和非Razor语句的代码,则用@:,他的作用是相当于在处于html下面编写一样了,如在@:后面可以加上@就是表示Razor语句的变量

     如:

    复制代码
    @{
    
        var str = "abc";
            ////下面会输出:this is a mail:dxl0321@qq.com, this is var: abc,this is mail@str,this is @;
        @: this is a mail:dxl0321@qq.com, this is var: @str,this is  mail@str,this is @@;
        //下面输出abc
        @str
      
    }
    复制代码

    Razor作用块注释

        razor作用块里面本身就是服务器代码了,因此可使用服务器代码的注释,注释有//和/**/分别是单行注释和多行注释。

       另外razor注释还可以使用自身特有的@* 注释的内容 *@,支持单行和多行的。

    复制代码
    @{
       @*
           多行注释
           多行注释
       *@
       var i = 10;  @* asdfasf *@
    }
    复制代码

    Razor类型转换

             As系列扩展方法和Is系列扩展方法

              AsInt(), IsInt()

          AsBool(),IsBool()

          AsFloat(),IsFloat()

         AsDecimal(),IsDecimal()

          AsDateTime(),IsDateTime()

        ToString()

    @{
        var i = “10”;
    }
    <p> i = @i.AsInt() </p> <!-- 输出 i = 10 --> 

    razor其它

      @Href("~/")//表示网站的根目录

      @Html.Raw(Module.Content)  输出HTML,如:@Html.Raw('<font color='red'>红字</font>'),就会显示出红色的”红字“,不用的话会直接显示这段html字符串(<font color='red'>红色文字</font>)

    在实际中,比如一个网站,整过框架是一样的,而有的地方是很多相同的版块。因此我们需要复用。

    布局(Layout)

       layout方式布局就是相当于一个模板一样的,我们在它地址地方去添加代码。相当于定义好了框架,作为一个母版页的,在它下面的页面需要修改不同代码的地方使用@RenderBody()方法

    复制代码
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8"/>
            <title>我的网站 - @Page.Title</title>
        </head>
        <body>
            @RenderBody()
        </body>
    </html>
    复制代码
    @{
        Layout = "/LayoutPage.cshtml";
        Page.Title = "测试页面哦";
    }
    
    <p>This is a layout test</p>

    页面(Page)

     page是当需要在一个页面中,输出另外一个razor文件的内容时候用到,比如头部或者尾部这些公共的内容时候需要用到。输出就使用 @RenderPage()方法

    如:A页面中也要把B页面的内容输出

    A页面:

    <p>
        @RenderPage("/b.cshtml")
    </p>

    b页面的代码如下:

    <font color="red">这是一个子页面</font>

    Section区域

        Section是定义在Layou的中使用的。在Layout的页面中用。在要Layout的父页面中使用@RenderSection("Section名称 ")

    定义:

    复制代码
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8"/>
            <title>我的网站 - @Page.Title</title>
        </head>
        <body>
         @RenderSection("SubMenu")
            @RenderBody()
        </body>
    </html>
    复制代码

    在它的子页面中使用

    @section SubMenu{
        Hello This is a section implement in About View.
     }

     如果在子页面中没有去实现了SubMenu了,则会抛出异常。我们可以它的重载@RenderSection("SubMenu", false)

    复制代码
     @if (IsSectionDefined("SubMenu"))
            {
                @RenderSection("SubMenu", false)
            }
            else
            {
                <p>SubMenu Section is not defined!</p>
            }
    复制代码

     Helper

       helper就是可以定义可重复使用的帮助器方法,不仅可以在同一个页面不同地方使用,还可以在不同的页面使用。

    如在cshtml中那么写:

    复制代码
    @helper sum(int a,int b)
    {  
       var result=a+b;
      @result } <div > <p>@@helper的语法</p> <p>2+3=@sum(2,3)</p>
    <p>5+9=@sum(5,9)</p>
    </div>
    复制代码

    我们通常会把一类Helper放在一个单独的cshtml文件中,而文件名就相当于一个类名。

    我把sum放在HelpMath.cshtml文件中,则我们在那上面cshtml中的使用方法是:

    <p>2+3=@HelpMath.sum(2,3)</p> 
    <p>5+9=@HelpMath.sum(5,9)</p>

    另外,系统还为我们提供了一些列的Helper,用来简化Html的书写。这些Helper放在@Html中,我们可以方便的使用:

    <p>
        @Html.TextBox("txtName")
    </p>

     本文页面来源地址:http://www.cnblogs.com/dengxinglin/p/3352078.html

    作者:划风
    邮箱:emaisi@hotmail.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    [LeetCode] 34. 在排序数组中查找元素的第一个和最后一个位置
    [LeetCode] 32. 最长有效括号
    [LeetCode] 31. 下一个排列
    [LeetCode] 30. 串联所有单词的子串
    [LeetCode] 29. 两数相除
    [LeetCode] 27. 移除元素
    转:畅享云时代:开发者必备的8个最佳云端集成开发环境
    转:前端集锦:十款精心挑选的在线 CSS3 代码生成工具
    转:So Easy!让开发人员更轻松的工具和资源
    转:Backbone与Angular的比较
  • 原文地址:https://www.cnblogs.com/userbibi/p/5465354.html
Copyright © 2011-2022 走看看