工作清闲好一段时间了,趁这段时间弄了弄PHP,做个了简单的MVC网页。玩了玩Android,弄了个拨号器,发短信的,嘿嘿,最满意的还是两天弄了个数独游戏。不务正业一个多月了,也该磨磨刀,接下来一段时间,我会陆续整理ASP.NET MVC和大家分享。

ASP.NET MVC 不是个新技术,是2009年发布的一个ASP.NET Web应用程序框架。下面我们就从几个方面一起来回顾MVC。

1.  什么是MVC

   ASP.NET MVC Framework是微软官方提供的MVC模式编写ASP.NET Web应用程序的一个框架.已于2009年3月19日正式发布. 
        MVC(Model-View-Controller)用于表示一种软件架构模式.它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller).

2. 创建MVC 项目

  如果你现在还在使用VS2008,需要下载 ASp.NET MVC Beta插件。如果你是中文版的可能按照会有些小问题。建议你使用Vs2010或2012。这里我使用VS2012演示。

选择  文件-- 新建 --- 项目  --- 确定 。

选择空模版,视图引擎 Razor。

我们可以看到项目中有几个文件夹的命名和MVC(Model-View-Controller,模型—视图—控制器模式)是对应的。

3. MVC 项目的执行原理

在介绍MVC项目的执行远离前,先回顾 WebForm模式。

当从地址栏中输入地址  http://localhost:8088/home/index.aspx 查看页面,服务器会在根目录下寻找home文件夹下的index.aspx页面然后由 index.aspx.cs去进行一些业务处理,可能还需要去数据库中读取数据,(怎么经过 BLL,DAL此处butane),然后有index.aspx页面呈现给用户。

简单来说就是客户端每访问一个路径,都会对应一个物理文件。

那MVC呢?

在MVC中,客户端的所请求的URL是被映射到相应的Controller去,然后由Controller来处理业务逻辑,或许要从Model中取数据,然后再由Controller选择合适的View返回给客户端。

在MVC中,客户端的所请求的URL是被映射到相应的Controller去,然后由Controller来处理业务逻辑,或许要从Model中取数据,然后再由Controller选择合适的View返回给客户端。

4. 初试牛刀  --  MVC  小案例

4.1 新建控制器HomeController,注意这里必须以 Controller 结尾

public class HomeController : Controller{public ActionResult Index(){//返回View给客户端,如果View不带参数,就是返回和Action同名的View// 相当于 return View("Index");return View();}
}

HomeController : Controller

Index 在这里称为 HomeController 的Action,一个 Controoler 中可以有多个Action

4.2 创建 视图

在Index , Action 中右击选择添加视图,去掉使用模板页,单击确定。

此时会在View目录下创建于Controller同名的文件夹 Home,在该目录下创建

@{Layout = null;
}<!DOCTYPE html><html>
<head><title>Index</title>
</head>
<body><div><h1>这是 /Views/Home/Index.cshtml 文件 </h1></div>
</body>
</html>

Index.cshtml

4.3 运行项目

仔细查看URL路径,它是如何定位到 Index.cshtml文件呢?

5. URL 路由原理

查看 Global.asax.cs文件

public static void RegisterRoutes(RouteCollection routes){//忽略对 .axd 文件的路由,向访问 webForm一样直接去访问 .axd文件routes.IgnoreRoute("{resource}.axd/{*pathInfo}");//路由规则
            routes.MapRoute("Default", // 路由名称"{controller}/{action}/{id}", // 带有参数的 URLnew { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
            );}protected void Application_Start(){AreaRegistration.RegisterAllAreas();// 默认情况下对 Entity Framework 使用 LocalDBDatabase.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");RegisterGlobalFilters(GlobalFilters.Filters);//程序启动时,定义Route规则
            RegisterRoutes(RouteTable.Routes);}

Globle

我们可以看到这里定义了一个名为"Default"的Route,还定义了默认的参数。默认参数的意义在于,当我们访问例如http://localhost:2176/的URL的时候,他会将不存在的参数用默认的参数补上,也就是相当于访问http://localhost:2176/Home/Index一样。 这也就解释了运行程序出现 index.cshtml页面。

我们知道了一个URL是怎样定位到相应的Controller中去的了,那么View又是怎么被返回给客户端的呢?我们从前面的看到,Controller中的Action方法中有个return View()的方法。默认情况下它会返回与Action同名的view.在ASP.NET MVC默认的视图引擎(WebFormViewEngine)下,view是按如下路径访问的:

/Views/{Controller}/{Action}.aspx

也就是说对于http://localhost:2176/Home/Index这个路径,在默认情况下,在Index这个Action中用return View()来返回view的时候,会去寻找/Views/Home/Index.aspx文件,如果找不到这个文件,就会去Share目录中寻找:/Views/Share/Index.aspx,如果都找不到,就会抛出找不到View的异常。return View("lulu.aspx")来指定要返回哪一个view:/Views/Home/lulu.aspx。

好了,我们现在看看直接访问 http://localhost:2176/View/Home/Index.cshtml 会出现什么情况呢?

OH,404错误,聪明的你知道为什么吗?

转载于:https://www.cnblogs.com/Theladyflower/p/ASPNET-MVC.html

ASP.NET MVC (一)相关推荐

  1. ASP.NET MVC 2示例Tailspin Travel

    Tailspin Travel 是一个旅游预订的应用程序示例,最新版本采用ASP.NET MVC 2技术构建,主要使用 DataAnnotations 验证, 客户端验证和ViewModels,还展示 ...

  2. Asp.net MVC中的ViewData与ViewBag

    在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从 ...

  3. ASP.NET MVC Identity 兩個多個連接字符串問題解決一例

    按照ASP.NET MVC Identity建立了一個用戶權限管理模塊,由于還要加自己已有的數據庫,所以建立了一個實體模型,建立了之后,發現登錄不了: 一直顯示"Login in faile ...

  4. asp.net mvc 学习

    Routing讲解: http://www.cnblogs.com/wangiqngpei557/p/3379095.html Filter讲解: http://www.cnblogs.com/ymn ...

  5. GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

    在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...

  6. ASP.NET MVC:利用ASP.NET MVC4的IBundleTransform集成LESS

    背景 LESS确实不错,只是每次写完LESS都要手工编译一下有点麻烦(VS插件一直没有安装好),昨天在官方看到了如何用IBundleTransform集成LESS,今天就记录一下. 参考资料:http ...

  7. 我要学ASP.NET MVC 3.0(一): MVC 3.0 的新特性

    摘要 MVC经过其1.0和2.0版本的发展,现在已经到了3.0的领军时代,随着技术的不断改进,MVC也越来越成熟.使开发也变得简洁人性化艺术化. 园子里有很多大鸟都对MVC了如指掌,面对问题犹同孙悟空 ...

  8. 学习ASP.NET MVC系列 - 还有比这更简炼的吗?把复杂的事情变简单了,贡献啊!...

    转自 学习ASP.NET MVC系列: 学习ASP.NET MVC(一)--我的第一个ASP.NET MVC应用程序 学习ASP.NET MVC(二)--我的第一个ASP.NET MVC 控制器 学习 ...

  9. Asp.net MVC 3 防止 Cross-Site Request Forgery (CSRF)原理及扩展 安全 注入

    原理:http://blog.csdn.net/cpytiger/article/details/8781457 原文地址:http://www.cnblogs.com/wintersun/archi ...

  10. ASP.NET MVC 重点教程一周年版 第九回 HtmlHelper 【转】

    许多时候我们会遇到如下场景 在写一个编辑数据的页面时,我们通常会写如下代码 1: <input type="text" value='<%=ViewData[" ...

最新文章

  1. iOS NSArray数组过滤
  2. Crypto windows 安装
  3. 数据中心、智慧机房全套解决方案
  4. java velocity是什么意思,什么是Apache Velocity?
  5. 你相亲成功的几率有多高?机器学习硬核预测
  6. 设计模式常见面试题汇总
  7. Swift的控制转移语句--continue语句
  8. django实例:创建你的第一个应用投票系统(3)后台管理
  9. matlab简支梁有限元分析,1.3 简支梁的有限元分析
  10. web前端开发工程师面试题大全
  11. WHENet: Real-time Fine-Grained Estimation for Wide Range Head Pose
  12. 免费版企业级杀毒软件mcafee使用报告。
  13. 我爱淘冲刺阶段站立会议2每天任务3
  14. SHT30 温湿度传感器 使用示例
  15. 处理动态图的图神经网络
  16. Matlab模拟循环编码译码
  17. 自己动手写一个分库分表中间件(三)数据源路由实现
  18. 核糖核酸RNA的药物修饰方法
  19. 使用Vue和Spring Boot实现文件下载
  20. 前辈工作经验分享总结

热门文章

  1. Android Activity和Intent机制学习笔记
  2. 《SQL与关系数据库理论——如何编写健壮的SQL代码》一第3章
  3. SQLite可视化管理工具汇总
  4. 「译」JUnit 5 系列:基础入门
  5. ECSHOP商品编辑器上传中文名图片产生乱码
  6. web本地存储-IndexedDB
  7. 【WPF】动态设置Binding的ConverterParameter转换器参数
  8. lvm讲解 磁盘故障小案例
  9. fpm定制化RPM包之nginx rpm包的制作
  10. (转)分布式文件存储FastDFS(五)FastDFS常用命令总结