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中写后台代码,导致前后端混合,不建议这么写,应该完全分离。但是微软设计这个框架,为了兼容所有的情况,做了这种功能。大家可以用也可以不用。

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

原文地址:https://www.cnblogs.com/wudequn/p/7675257.html