• 精通MVC网站、MVVM开发模式、Razor语法


    http://www.cnblogs.com/powertoolsteam/p/MVC_one.html

    ASP.NET MVC (一)——深入理解ASP.NET MVC

    以下是ASP.NET MVC 请求流的通用步骤:
    1:首先获取控制器。
    2:依赖行为控制器创建Model对象,Model通过转换调用数据访问层。
    3:数据填充Model之后,传递到View 显示层,实现显示的目的。

    在Asp.Net MVC中,C代表Controller,就是用来处理用户交互逻辑的。
    1.****Controller 和****之间的关系是什么?
    控制器的定义:控制器名+Controller


    2. Action(行为) 方法是什么?
    Action 方法是Controller内置的public类型的方法,能够接收并处理用户的请求。

    禁止行为[NonAction]
    public string ActionMethod(){}

    关于View方法:return View("MyView");
    public class HelloController : Controller
    {
      public ActionResult My()
      {
        return View("View");
      }
    }
    注释:调用的是View.shtml页面;控制其名称为Hello,行为名称为My;即:/hello/my,显示的是hello目录下的View.shtml页面,View对应的cs文件为My方法


    View部分
    Controller是处理用户请求,并做出响应,通常情况下响应都是以显示在浏览器中,使用HTML代码,浏览器才可识别。

    Shared文件夹中所有的Controller都可用,其他的都对应相同的控制器;

    4. View函数的功能是什么?
     创建 ViewResult 对象将会渲染成视图来给用户反馈
        1)ViewResult 创建了ViewPageActivator 对象
        2)ViewResult 选择了正确的ViewEngine,并且会给ViewEngine的构造函数传ViewPageActivator对象的参数
        3)ViewEngine 创建View类的对象
        4)ViewEngine 调用View的RenderView 方法。

    5. ActionResult和 ViewResult的关系是什么?
    ActionResult是抽象类,而ViewResult是ActionResult的多级孩子节点,多级是因为ViewResult是ViewResultBase的子类,而ViewResultBase是ActionResult的孩子节点。

    6. 什么是ContentResult?
    ViewResult是HTML响应而ContentResult是标准的文本响应,仅返回字符串类型。区别就在于ContentResult是ActionResult的子类。

    ASP.NET MVC (二)——ASP.NET MVC 数据传递
    ViewData相当于数据字典,包含Controlle和View之间传递的所有数据。Controller会在该字典中添加新数据项,View从字典中读取数据。
    1. 创建Model 类
    namespace Models
    {
        public class User
        {
            public int Money{set;get;}
        }
    }

    2. 在Controller 中获取Model
        User model = new User();

    3. 创建ViewData 并返回View
        ViewData["model"] = model;

    4. 在View中显示Employee 数据
        1) @{Models.User model = (ViewData.User)ViewData["User"];}
        2) @model.Money.ToString("C")

    ViewBag的使用
    ViewBag可以称为ViewData的一块关于语法的辅助,ViewBag使用C# 4.0的动态特征,使得ViewData也具有动态特性。
        1) @{Models.User model = (ViewData.User)ViewBag.User;}
        2) @model.Money.ToString("C")

    可以从Controller Action方法中传递Model数据。
    User model = new User();
    return View("MyView",model);

    调用:
    @using Models
    @model user

    MVC 中的View Model
    ViewMode用于维护Model与View之间数据传递的,是View的数据容器。

    Model 和 ViewModel 的区别
    Model是业务相关数据,是根据业务和数据结构创建的。
    ViewModel是视图相关的数据。是根据View创建的。

    ViewModel模式的具体工作原理
        1.Controller 处理用户交互逻辑或简单的判断。处理用户需求
        2.Controller 获取一个或多个Model数据
        3.Controller 决策哪个View最符合用户的请求
        4.Controller 将根据Model数据和View需求创建并且初始化ViewModel对象。
        5.Controller 将ViewModel数据以ViewData或ViewBag或强类型View等对象传递到View中。
        6.Controller 返回View。

    View 与 ViewModel 之间是如何关联的?
    View将变成ViewModel的强类型View。

    Model和 ViewModel 是如何关联的?
    Model和ViewModel 是互相独立的,Controller将根据Model对象创建并初始化ViewModel对象。

    ViewModel设计模式实例:
    1. 新建文件夹
    在项目中创建新文件夹并命名为ViewModels。

    2. 新建UserViewModel
    public class UserViewModel{}

    3. View中使用ViewModel
    @using ViewModels    <!-- 命名空间 -->
    @model UserViewModel    <!-- 实力类别 -->

    4. 在View中显示数据
    @model.Money.ToString("C")

    5. 用Controller传递ViewModel
    public ActionResult My()
    {
        User model = new User();
        model.Money = 0;

        UserViewModel vm = new UserViewModel();
        vm.Money = model.Money.ToString("C");
        return View("View", vm);
    }


    Razor语法大全:http://www.cnblogs.com/dengxinglin/p/3352078.html
    Razor文件类型
       Razor分别对应了两种文件类型,.vbhtml和.cshtml

    Razor的标识符
    @和@{code}字符对应<%%>服务器代码块一个道理。

    如下实例
    定义:@{string name= "名称";}
    输出:@name
    输出内置:@DateTime.Now.ToString("yyyy-MM-hh")
    输出符号@:使用@@
    条件输出: @if(){}else{}
    遍历输出:@foreach (UserViewModel item in Model.User){@item.Money}

    Razor作用块注释
    使用自身特有的@* 注释的内容 *@,支持单行和多行
    @{
       @*
           多行注释
       *@
       var i = 0;  @* 单行注释 *@
    }


    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>')

    布局(Layout)
    layout方式布局就是相当于一个模板一样的,我们在它地址地方去添加代码。
    1.定义母版页LayoutPage.cshtml
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8"/>
            <title>我的网站 - @Page.Title</title>
        </head>
        <body>
            @RenderBody()
        </body>
    </html>

    @{
        Layout = "/LayoutPage.cshtml";
        Page.Title = "母版页为LayoutPage";
    }

    2.页面(Page)
    <p>
        @RenderPage("/MyPage.cshtml")
    </p>

    3.Section区域
    Section是定义在Layou的中使用的。在要Layout的父页面中使用@RenderSection("Section名称 "),类似于<!-- #include file="模板" -->
    <!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就是可以定义可重复使用的帮助器方法,不仅可以在同一个页面不同地方使用,还可以在不同的页面使用。
    @helper sum(int a,int b)
    {  
       var result=a+b;
      @result  

    }
    <div >
        <p>2+3=@sum(2,3)</p>
        <p>5+9=@sum(5,9)</p>
    </div>

    另外,系统还为我们提供了一些列的Helper,用来简化Html的书写。这些Helper放在@Html中,我们可以方便的使用:
    <p>
        @Html.TextBox("txtName")
    </p>

  • 相关阅读:
    Apache日志分析
    iptables日志探秘
    php与其他一些相关工具的安装步骤分享
    ERROR 1 (HY000): Can't create/write to file '/tmp/#sql_830_0.MYI' (Errcode: 13)
    一些可能需要的正则
    restful api的简单理解
    认识MySQL Replication
    如何处理缓存失效、缓存穿透、缓存并发等问题
    经典算法mark
    php常用的一些代码
  • 原文地址:https://www.cnblogs.com/sntetwt/p/5313882.html
Copyright © 2020-2023  润新知