http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4289|回复: 0

[Asp.Net] ASP.NET MVC3 读书笔记一(Razor视图语法)

[复制链接]
发表于 2013-1-17 09:40:13 | 显示全部楼层 |阅读模式
ASP.NET MVC是一种构建web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架;       ASP.NET约定优于配置;基本分为模型(对实体数据的描述)、视图(一个动态生成HTML页面的模板)、控制器(协调用户的请求返回模型实体或返回其他数据根据对应模板动态生成html返回给用户)
       请求都是先经过Controller找到下面的Action(即返回值为ActionResult的方法);在默认路由的情况下,/Home/Index 则请求的是HomeController类下面的Index方法,返回视图名称为Index的视图;HomeController名称必须是整个MVC程序中唯一的类名称,访问HomeController不需要区分文件夹的嵌套;HomeController查找Index视图模板(在不具体指定渲染哪个模板的时候)是先查找Views文件下面的Home文件下的index名称的模板;如果没有就会查找Views下面的Shared文件下的index名称的模板;
       以下将从视图、控制器、模型以及一些相关知识点讲起;
       Razor视图(模板):它本身不会被直接访问,浏览器不能指向一个视图并渲染它,然而,视图总是被一个控制器渲染,该控制器向它提供了要渲染的数据;
       Razor视图语法:
      1、  模板中定义代码块
View Code <body>    <div>        @{            string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");            }        @time    </div></body>

      即可以在页面打印时间
      2、代码与HTML标签嵌套书写@开始即为C#语义解释   
View Code @{            List<string> strs = new List<string>() { "测试1", "测试2", "测试3" };            }        @foreach (var item in strs)        {            <li style="margin-left:30px;font-size:12.5px;">@item</li>        }

      3、 当定义如下
@{            string name = "name";            }        <li>@name.Model</li>
  我们想输出name.Model的时候视图解释的时候就不会被编译通过;此时就需要@(name).Model这样才能输出name.Model,括号是告诉解释器括号内的东西需要进行编译解释;
  4、  现在我们想在视图中打印出邮箱后缀@qq.com此时Razor会将@qq.com当作C#代码来解释执行,这时我们需要2个@来对一个@进行转义,比如@@qq.com;但是如果我们输入184057662@qq.com与184057662@@qq.com结果都是一样的;因为在@前面有字符串连接,后面会自动当作字符串处理;而@@会被转义成一个@所以两个结果是一样;(输出@还可以使用&#64代替)
      5、 接上面,qq是一个C#代码的变量,我们需要打印184057662@qq.com该如何?如何?
@{            string qq = "telnet";            }        184057662@qq.com
      现在视图完全理解错了我的意思;此时我们只要按照3中的解决办法给@qq改为  @(qq)即可输出184057662telnet.com
      6、  页面中除了文本还会有js,我们定义如下:
@{            string mess = "<h1>Hello Razor</h1>";            }        @mess
      此时输出的文本就是原来定义的字符串文本,会把Hello Razor变为H1标签包裹;
      此时有两种方法处理第一种是我们需要用到Html辅助方法进行处理@Html.Raw(mess)将mess进行html编码后进行输出
      另一种是在定义的时候创建MvcHtmlString
@{            string mess = "<h1>Hello Razor</h1>";            MvcHtmlString messHtml = new MvcHtmlString(mess);        }        @messHtml
     同样也适用于定义mess=” <script>alert('Hello Razor');</script>”的脚本提示;
     7、  在代码中定义如下
@{            bool showMess = true;            }        @if (showMess) {             this is TextAreaExtensions        }
      我们在判断完showMess的值后只想打印文本this is TextAreaExtensions,但razor却还认为括号里面是表达式;此时我们需要在里面用<></>括号的标签折断if语义的继续判断一般嵌套一个<div></div>即可;
      或者按照如下
@if (showMess) {             @:this is TextAreaExtensions        }
      8、  服务器端的注释为@**@
      9、 视图布局模板(母版页)

<body>    <div class="page">        <div id="main">            @RenderBody()        </div>    </div></body>

     在main div中有个@RenderBody();在需要用到母版页的cshtml中如下即可
@{    Layout = "~/Views/Shared/_Layout.cshtml";}<p>     将内容放置在此处。</p>
      在视图中如果不主动指定Layout为具体母版或null则会默认寻找/Views/_ViewStart.cshtml页面为母版页;
  还可以在页面中添加一些页脚节点比如

<body>    <div class="page">        <div id="main">            @RenderBody()        </div><div id="footer">              <footer>@RenderSection("Footer")</footer>        </div>    </div></body>

  使人页脚节点如下:

@{    Layout = "~/Views/Shared/_Layout.cshtml";}<p>     将内容放置在此处。</p>@section Footer{        这是页脚节点    }

      Razor视图只是MVC中视图引擎中的一种,还有我们熟知的aspx视图引擎,还有很多第三方的视图引擎比如:Spark、NHaml、Brail等;所以至此,千万不要把视图当成普通的页面来看待,视图引擎可以根据Controller的控制编译出页面呈现给用户;
/*********代码创 建 人:陈坤                                        ********//
//*********联 系  方 式:QQ:417643479 邮箱:youhaoxinqin@sina.com     ********//




1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-19 08:15

© 2014-2021

快速回复 返回顶部 返回列表