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>

精通MVC网站、MVVM开发模式、Razor语法的更多相关文章

  1. js架构设计模式——理解javascript中的MVVM开发模式

    理解javascript中的MVVM开发模式 http://blog.csdn.net/slalx/article/details/7856769 MVVM的全称是Model View ViewMod ...

  2. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

  3. mvc 控制器,视图,Razor 语法

    mvc 控制器controller:响应用户请求,并修改模型model;输入数据的处理,输出view数据的提供: url入控制器的方法有关联:MVC提供的是方法调用结果: mvc model:是对应用 ...

  4. ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考

    原文:Razor Syntax Reference 作者:Taylor Mullen.Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:何镇汐 什么是 Razor? Razor 是一 ...

  5. [ASP.NET MVC 小牛之路]03 - Razor语法

    本人博客已转移至:http://www.exblr.com/liam  Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指 ...

  6. [Asp.net MVC]Asp.net MVC5系列——Razor语法

    Razor视图引擎是Asp.net MVC3中新扩展的内容,并且也是它的默认视图引擎.还有另外一种Web Forms视图引擎.通过前面的文章可知在Asp.net mvc5中创建视图,默认使用的是Raz ...

  7. 玩转Android之MVVM开发模式实战,炫酷的DataBinding!

    C# 很早就有了MVVM的开发模式,Android手机中的MVVM一直到去年Google的I\O大会上才推出,姗姗来迟.MVVM这中开发模式的优点自不必多说,可以实现视图和逻辑代码的解耦,而且,按照G ...

  8. Asp.net MVC 中 CodeFirst 开发模式实例

    昨天写的这篇博客因为下班时间到了忘记保存了,好郁闷,得重新写一遍.实习所在公司使用的是CodeFirst开发模式,最近开始参与到公司的项目里面来了,发现这个模式特别好用,建库建表改变字段属性添加删除字 ...

  9. [ASP.NET MVC 小牛之路]03 - Razor语法(转)

    出处:http://www.cnblogs.com/willick/p/3224144.html Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠< ...

随机推荐

  1. 用c#开发微信 (16) 微活动 2 刮刮卡

    微信营销是一种新型的营销模式,由于微信更重视用户之间的互动,故而这种营销推广不不能盲目地套用微博营销的单纯大量广告推送方式.这种方式在微信营销中的效果非常差,会令用户反感,继而取消去企业或商家的微信公 ...

  2. 跟我一起学WCF(7)——WCF数据契约与序列化详解

    一.引言 在前面博文介绍到,WCF的契约包括操作契约.数据契约.消息契约和错误契约,前面一篇博文已经结束了操作契约的介绍,接下来自然就是介绍数据契约了.所以本文要分享的内容就是数据契约. 二.数据契约 ...

  3. C语言 稀疏矩阵 压缩 实现

    稀疏矩阵压缩存储的C语言实现 (GCC编译). /** * @brief C语言 稀疏矩阵 压缩 实现 * @author wid * @date 2013-11-04 * * @note 若代码存在 ...

  4. [ucgui] 对话框1——创建对话框

    >_<" 小工具和对话框的区别: 小工具可以创建并独立使用,因为它们本质上就是窗口.但是,通常需要使用对话框,它是包含一个或多个小工具的窗口. 对话框通常是一个窗口,它在出现时会 ...

  5. SpringMVC文件上传实现

    SpringMVC(注解)上传文件需要注意的几个地方:1.form的enctype="multipart/form-data",这个是上传文件必须的2.applicationCon ...

  6. java开发常用jar包介绍(转载)

    jta.jar 标准JTA API必要 commons-collections.jar 集合类 必要 antlr.jar  ANother Tool for Language Recognition ...

  7. 访问IIS元数据库失败解决方法

    问题:访问元数据失败 详细信息 访问 IIS 元数据库失败. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信 ...

  8. 注册asp.net

    %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

  9. Java程序员的日常 —— 工作一天的收获

    看题目可能是扯皮,其实还是有很多专业知识的.从最开始没有注意到设计原则,到后面的jquery实战技巧,都是今天一天碰到的问题. 每天整理一点点,每天收获一点点. 关于软件设计 在设计系统结构的时候,一 ...

  10. 详解Bootstrap缩略图组件及警示框组件

    缩略图组件 缩略图在网站中最常用的就是产品列表页面,一行显示几张图片,有的在图片底下带有标题.描述内容.按钮等信息.bootstrap框架将这部分独立成一个模块组件,通过类名.thumbnail配合b ...