zoukankan      html  css  js  c++  java
  • MVC-初识

    RAZOR视图介绍

    一个cshtml,主体是一个html文本,里面可以写前台和后台代码,混合编写(个人认为不太好,应该分离),这个文件最后会被会被编译为一个类(所以他可以像类一样写一些方法,其他的地方调用)。

    cshtml对应的有razor视图引擎,

    RAZOR语法

    Razor标识符

      @为服务器代码标识符,@UserName  @{....}

    输出HTML

      @UserName    @Html.XXX       需要注意这些直接数据的,必须有返回值(例如:  @Html.Partial()    @{Html.RenderPartial()})

    输出文本@:

      @:我是要输@出的内容

      <text>sdfsdf</text>  输出文本

      @{ Response.Write(456);}  因为cshtml文件会在后台处理变成html然后写入response响应流,但是这个直接写入到响应流中。所以他应该在页面上面,因为他先写入响应流。

      视图解析过程  视图一行一行解析,解析的东西render到内存缓存区。等全部解析完后, 然后在写入到response中。

      @{ ViewContext.Writer.Write("789W");}

      @@  输出@

      

    作用域

      @{}  里面像写后台代码一样。

      @{

          var username="123";

          @username;

      }

      @if(1==2){

        

          }

    混合编写

    <div class="checkbox">
        <input type="text" value="@Model.Password" />
        @Html.CheckBoxFor(m => m.RememberMe)
        @Html.LabelFor(m => m.RememberMe)
    </div>
    View Code
    @foreach (var account in Model.CurrentLogins)
    {
        <tr>
            <td>@account.LoginProvider</td>
            <td>
                @if (ViewBag.ShowRemoveButton)
                {
                    using (Html.BeginForm("RemoveLogin", "Manage"))
                    {
                        @Html.AntiForgeryToken()
                        <div>
                            @Html.Hidden("loginProvider", account.LoginProvider)
                            @Html.Hidden("providerKey", account.ProviderKey)
                            <input type="submit" class="btn btn-default" value="删除" title="从你的帐户中删除此 @account.LoginProvider 登录名" />
                        </div>
                    }
                }
                else
                {
                    @: &nbsp;
                }
            </td>
        </tr>
    }
    View Code

    类型转换   类型判断

      @name.AsInt()       @name.IsInt()

      @name.AsFloat()       @name.IsFloat()

      。。。

    帮助类helper

      因为cshtml最后被编译为一个类,为后台代码,所以里面可以写一些函数。

    @helper sum(int a, int b)
    {
        var resu = a + b;
        @resu
    }
    View Code

    注意:服务器会把cshtml页面进行一次转换成html,然后response出来

    Razor常用函数

    扩展控件    @html.。。。  可以自己扩展控件

      @Href()

      @Html.Raw() 

      @Html.RouteLink ()    会去查找路由,根据第一个符合的生成连接。

    LayOut布局页  

      布局页就相当于webform中的母版页,@RenderBody() 主体部分,使用该布局页的子页会自动把内容加载到@RenderBody()里面。

      @RenderPager("路径 带文件后缀名", new {ID=1,Name="123" })   可以指定参数  对应的页面获取参数  @PageData["ID"]。注意这个页面不能使用父页面中的ViewData  ViewBag   model等数据,但是partial可以

      约定俗称:所有的页面都会继承_ViewStart.cshtml页面  这个页面中默认指定了布局页。(部分视图不会继承这个页面)

            当我们的页面未指定layout时候,如果项目在全局或者同文件夹里面存再_ViewStart.cshtml文件,该页面会使用这个_ViewStart.cshtml中的layout

                           如果不同的文件夹中都存在_ViewStart.cshtml文件,则会使用最近的一个文件。(区域里面的视图也可以指定自己的)

    @{
        Layout = "~/Views/Shared/_Layout.cshtml";
    }

      也可以在具体的cshtml页面中指定布局页

    Session区域

      也是在LayOut重使用的。父页面中@RenderSection("名字",false)   子页中@section 名字{}     一般是写页面所有的js css等项

      @RenderSection("scripts", required: false)  

      @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
      }

    Partial   RenderPartial

      可以使用父页面的ViewData  ViewBag等数据,以及数据模型。

      @{Html.RenderPartial("../Shared/ADV");}   在分布视图中可以使用父页面的模型

      @{Html.RenderPartial("../Shared/ADV", "sdfjoiv");} 指定好模型

      @{Html.RenderPartial不会生成缓存

           @Html.Partial()直接会生成缓存

    Action RenderAction

      经过路由 然后到控制器

      用法和partial一样

      Action中返回PartilResult       return PartialView();

    总结RenderPartial适合用户重复的控件,并且可以用model来加载。RenderAction适合通过后台代码在计算 获取数据等来使用,Action也可以做控件,不过是那种有逻辑数据库打交道的。RenderPage 需要路径 文件名字。

    其他注意事项

    1、引入命名空间

    具体页面加入

    Action中Return View(模型)

    @using WebApplication14.Areas.System

    使用 获取属性

    @Model.属性

    配置文件加入

    总结:其实这些在cshtml中写后台代码,导致前后端混合,不建议这么写,应该完全分离。但是微软设计这个框架,为了兼容所有的情况,做了这种功能。大家可以用也可以不用。

       团队工作很多东西都是分开的,模块化。接口  类  业务  项目  技术......。以便于快速开发以及维护扩展。但是很多小的公司以及小的项目 为了节约成本和时间  需要的是全栈工程师。一个人开发。就导致各种混合。

  • 相关阅读:
    我的管理/创业类文章
    去硅谷之前写的文章.
    【Linux资源管理】一款优秀的linux监控工具——nmon
    Oracle 11g密码过期问题
    HP-UNIX平台修改Oracle processes参数报错:ORA-27154、ORA-27300、ORA-27301、ORA-27302
    [转]收集Oracle UNDO诊断信息脚本
    【Linux资源管理】使用sar进行性能分析
    Oracle ASM
    Oracle oerr工具介绍
    Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态
  • 原文地址:https://www.cnblogs.com/wudequn/p/7675257.html
Copyright © 2011-2022 走看看