最近在和同学一起研究毕业设计,准备模仿<Pro ASP.NET MVC 4>里面的SportsStore设计模式和测试驱动开发. 由于和书中VS版本不同,发现不少问题,在此总结. 用户代码未处理 System.InvalidOperationException (msdn: 当方法调用对于对象的当前状态无效时引发的异常.) HResult=-2146233079 Message=未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序.请确…
在本章,我们将介绍每个MVC程序员"武器库"的三个重要工具:依赖注入容器.单元测试框架和mock工具.在本书,对于三个工具分别都只用了一种方式实现,但每个工具都还有其他的实现方式.如果我们的实现方式不适合你的具体情况,那么你也不必担心.因为它们并不仅仅局限于我们采用的实现,你可以找到与你工作环境相适合的实现方式. 在第三章,我们提到Ninject是一个推荐的依赖注入容器.它非常简单,优美,并易于使用.虽然还有一些其他的可使用的依赖入住容器,但是我们喜欢只需要进行很少配置就可以工作的Ni…
每个MVC程序员的军火库中,都有这三个工具:一个依赖注入(DI)容器,一个单元测试框架,一个模拟工具. 1.准备一个示例项目 创建一个ASP.NET MVC Web Application的Empty项目,命名为EssentialTools. 1.1. 创建模型类 在Models文件夹下,创建Product类. public class Product { public int ProductId { get; set; } public string Name { get; set; } pu…
3 创建购物车 每个商品旁边都要显示Add to cart按钮.点击按钮后,会显示客户已经选中的商品的摘要,包括总金额.在购物车里,用户可以点击继续购物按钮返回product目录.也可以点击Checkout now按钮,完成订单和购物会话. 3.1 定义Cart Entity 购物车是程序业务域的一部分,在我们的领域模型中创建实体.添加一个Cart类到Entities文件夹. 购物车类使用CartLine,代表用户选中的一个商品.定义了添加.移除.计算合计.清空的方法.我们也提供了一个属性,返回…
C#语言有很多特性,并不是所有的程序员都了解本书我们将会使用的C#语言特性.因此,在本章,我们将了解一下作为一个好的MVC程序员需要了解C#语言的特性. 每个特性我们都只是简要介绍.如果你想深入了解LINQ或C#,你可以去参考Adam的三本书:Introducing Visual C#,你可以全面地了解C#语言:Pro LINQ in C#,你深入了解LINQ:Pro .NET Parallel Programming in C#,你可以详细地了解.NET所支持的异步编程.这些书都出自Apres…
学习一个软件开发框架的最有效的方式就是了解并使用它.在本章,你将会创建一个简单基于ASP.NET MVC Framework的数据-实体应用程序.我们会该程序划分成若干小块,每次介绍一个部分,以便你能了解到ASP.NET MVC是如何创建的.在本涨,我们会跳过一些技术细节,以使你能快速对整个框架有一个大致的了解.如果你对这些技术细节干兴趣,那么你也不用担心,我们会在后续的章节陆续介绍她们. 1 准备工作 创建ASP.NET MVC4程序的唯一准备工作就是你需要安装Visual Studio 20…
书Adam The Definitive Guide to HTML5 Adam Applied ASP.NET 4 in Context and Pro ASP.NET 4 到此为止,我们已经学了为什么ASP.NET MVC框架会出现,认识了建筑和潜在的设计目标.我们已经做了一个很好的测试驱动的实际的电子商务应哟那个.现在是时候打开钩子,揭示框架机制的所有细节. 在本书的第二部分,我们关注细节.从揭示一个ASP.NET MVC程序的结构,和应用请求处理管道开始.接着关注每个特性个体,如rout…
1.Ninject条件绑定方法When(predicate)WhenClassHas<T>()WhenInj ectedInto<T>()例: kernel.Bind<IDiscountHelper>().To<FlexibleDiscountHelper>() .WhenInj ectedInto<LinqValueCalculator>(); 2.Ninject对象生命周期InTransientScope() //默认值, 短暂的周期, 每次…
Adam Applied ASP.NET 4 in Context 1 介绍Routing系统 在引入MVC之前,ASP.NET假定被请求的URLs和服务器硬盘上的文件之间有着直接关系.服务器的任务是从浏览器接受请求,从相应文件分发请求. 这种工作方式只是用与Web Forms,每个ASPX页面都是一个文件,它有独立的回应请求的相应. 要处理MVC URLs,ASP.NET平台是用routing系统.在这章,我们展示如何设置和使用routing系统,来创造强大且灵巧的URL处理.routing系…
1 设置表单身份认证 因为ASP.NET MVC基于ASP.NET平台的核心,所以我们可以使用ASP.NET Form的身份认证,这是保持用户登录轨迹通用的方法.现在介绍最基本的配置. 在Web.config文件中,有这么一段 </authentication> 表单身份认证自动地被空的模板或Internet程序模板MVC程序启用.当需要要认证时,loginUrl属性告诉ASP.NET,定向到哪个URL.在这里,会定向到/Account/Logon页面.timeout属性指定用户登陆后,过期时…
在第七章,我们将创建一个更复杂的ASP.NET MVC示例,但在那之前,我们会深入ASP.NET MVC框架的细节:我们希望你能熟悉MVC设计模式,并且考虑为什么这样设计.在本章,我们将讨论下列内容 MVC架构模式 域模型和Respositories 使用依赖注入创建松耦合的系统 自动化测试的基础 你或许已经对本章我们将讨论的概念和规范非常熟悉,尤其如果你有开发ASP.NET或者C#的经验.如果不熟悉,那么我们非常鼓励你仔细阅读本章,因为对MVC底层的理解有助于我们在后续的章节利用MVC框架的特…
我们要建造的程序不是一个浅显的例子.我们要创建一个坚固的,现实的程序,坚持使它成为最佳实践.与Web Form中拖控件不同.一开始投入MVC程序付出利息,它给我们可维护的,可扩展的,有单元测试卓越支持的构造精良的代码.一旦我们有了基本的基础设施,我们就能加快. 1 创建解决方案和项目 1.1 创建一个空白解决方案,命名为SportsStore,添加三个项目 Project Name VS Project Template Purpose SportsStore.Domain 类库 提供域实体和逻…
Razor是微软在MVC3中引入的视图引擎的名字,在MVC4中对其进行了改进(尽管改动非常小).视图引擎处理ASP.NET内容.寻找指令,典型地用于插入动态数据并输出到浏览器中.微软维持了两个视图引擎——ASPX视图引擎工作与<%%>标签,ASP.NET已经依赖它多年:RAZOR引擎工作与@字符后的内容块上. 总的来说,如果你熟悉<%%>语法,那么你就不会在使用Razor时有太多问题,尽管Razor中有一些新的规则.在本章,我们将为你介绍Razor语法,以使你可以在看到它们的时候能…
管理功能,如何身份认证,对controller和action方法过滤安全的访问,并在用户需要时提供证书. 1 添加分类管理 方便管理的controller,有两类页面,List页面和edit页面. 1.1 创建CRUD Controller 在Controller文件夹上点右键,创建带CRUD的controller.我们要展示如何构建controller,并解释每个步骤,删除所有的方法,只留构造函数. } 1.2 用Repository中的产品渲染一个Grid 添加Index方法,显示repos…
在之前的章节,偶们设置了核心的基础设施,现在我们将使用基础设计添加关键特性,你将会看到投资是如何回报的.我们能够很简单很容易地添加重要的面向客户的特性.沿途,你也会看到一些MVC框架提供的附加的特性. 1 添加导航控件 如果使用分类导航,需要做以下三个方面: 增强List action模型,让它能过滤repository中的Product对象 重访并增强URL方案,修改我们的重路由策略 创建sidebar风格的分类列表,高亮当前分类,并链接其它分类 1.1 过滤Product列表 偶们要增强视图…
这三个工具,应该是每个MVC程序员的兵工厂中的一部分.DI容器,单元测试框架,mocking 工具.Ninject是我们偏爱的DI容器,它简单,高雅,并且容易使用.这里有很多复杂的替代品,但是我们喜欢Ninject最小配置的工作方式.如果你不喜欢Ninject,可以使用Unity,它是微软提供的替代品. 单元测试方面,我们使用VS2010内置的 NUnit,它是.Net 单元测试框架中最受欢迎的一个. Mocking 工具套装,我们选择 Moq.如果你不喜欢它,可以使用Rhino Mocks这个…
C# 是一个富有特性的语言,并不是所有的程序员都熟悉本书依赖的所有特性.在本章,我们看看作为一个好的MVC程序员需要知道的C#特性. 1 C#主要特性 } 1.1 使用扩展方法 扩展方法 在你不能拥有,和不能直接修改类时,给类添加方法一个方便的方式. } 假设我们需要决定ShoppingCart类中Product对象的所有值,但是我们不能修改类本身,也许是因为它来自于第三方,我们没有源代码.幸运地,我们可以使用扩展方法,来得到我们想要的功能. } 第一个参数前的 this 关键字,使得 Tota…
Binding to a Derived Type绑定派生类型Although we have focused on interfaces (since that is most relevant in MVC applications), we can alsouse Ninject to bind concrete classes. 我们关注这个接口(在mvc 应用里 是意义重要的), 还可以 用Ninject 去绑定这个具体的类 In the previous section, we sh…
2.5.创建链式依赖 当你请求Ninject创建一个类型,它检查该类型的依赖是否声明.它也会检查该依赖是否依赖其他类型.如果这里有附加依赖,Ninject自动解决他们,并创建请求的所有类的实例.正是由于这样的链式依赖,它最后创建了你请求的类型的实例. 要展示这个特性,我已经添加一个叫做DisCount的类,到Models文件夹,用它来定义一个新的接口,和该接口的一个实现. public interface IDiscountHelper { decimal ApplyDiscount(decim…
1 扩展数据库 打开表定义,新增两列可空 ) 2 增强领域模型 为Products类添加如下属性 publicstring ImageMimeType { get; set; } 第一个属性不会在界面上显示,因为框架不会为byte数组渲染编辑框,只有int ,string,DateTime等有.第二个属性隐藏. 需要确保属性名和数据库中的列名相同. 3 更新EF概念模型 偶们在数据库中建了新列,在Product类中建了相应的属性.现在我们要更新EF概念模型,相互映射.…
在之前的例子中,我们创建了FakeRepository类来支持我们的测试.但是我们还没有解释如何穿件一个真实的repository实现,我们需要一个替代品.一旦我们有一个真的实现,我们可能不会再用它,因为它把我们的测试环境变得复杂. FakeRepository类,是IProductRepository接口的伪实现.我们创建伪实现,并手动添加特别的参数,使得FakeRepository类手动的仿制品.Moq是一个框架,让我们仿制变得快速,简单,容易. 1 将Moq添加到测试项目,而不是应用程序项…
IProductRepository接口定义了一个仓库,我们通过它获得.更新Product对象.IPriceReducer接口指定了一个功能,它将要对所有的Products实施,通过一个参数,降低他们的价格. 在这个例子中,我们的目的是创建一个IProductReducer的实现,它有以下功能: 仓库中所有Product的价格都要减 仓库的UpdateProduct方法可以被每个Product对象调用 价格不能低于1 为了帮助我们建立实现,我们创建一个FakeRepository类,它实现了IP…
Model Binding(模型绑定)是 MVC 框架根据 HTTP 请求数据创建 .NET 对象的一个过程.我们之前所有示例中传递给 Action 方法参数的对象都是在 Model Binding 中创建的.本文将介绍 Model Binding 如何工作,及如何使用 Model Binding,最后将演示如何自定义一个 Model Binding 以满足一些高级的需求. 本文目录 理解 Model Binding 在阅读本节之前,读者最好对 URL 路由和 ControllerActionI…
上一篇博文 [ASP.NET MVC 小牛之路]15 - Model Binding 中讲了MVC在Model Binding过程中如何根据用户提交HTTP请求数据创建Model对象.在实际的项目中,我们需要对用户提交的信息进行验证.MVC 对验证提供了较好的支持,如可以通过 Model 元数据设置验证规则.用 ModelState 来处理错误信息等.本文将介绍 Model 的各种验证及其使用.虽然 Model 验证使用起来很简单,但为了更深入的理解它,强烈建议大家在阅读本文前先阅读 [ASP.…
原文:Model Validation in Asp.net MVC 本文用于记录Pro ASP.NET MVC 3 Framework中阐述的数据验证的方式. 先说服务器端的吧.最简单的一种方式自然是直接在Action方法中来进行了,如下:         [HttpPost]        public ViewResult MakeBooking(Appointment appt)        {                    if (String.IsNullOrWhiteSp…
原文:返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model [索引页][源码下载] 返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model 作者:webabcd介绍asp.net mvc 之 asp.net mvc 3.0 新特性之 Model: 通过 Data Annotations 与 jQuery 的结合实现服务端和客户端的双重验证 双重验证中,使客户端实现远程的异步验证 自定义 Data Annot…
MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从Why,What,How三个角度整理MVC 的学习资源,让学习者第一时间找到最有价值的文章,获取最彻底的ASp.NET MVC 框架知识,Let’s go! 1. Why :为什么需要ASP.NET MVC 本章主要为大家汇总了为什么学习Asp.net MVC替代WebForms,产生ASP.NET…
我们知道,在 MVC 中每个请求都会提交到 Controller 进行处理.Controller 是和请求密切相关的,它包含了对请求的逻辑处理,能对 Model 进行操作并选择 View 呈现给用户,对于业务和数据的逻辑代码以及接口和辅助类库等一般都不放到 Controller 中. Controller 和 Action 的内容较多,我把它分成了两篇,也可能会分成三篇.本篇介绍 Controller 的实现.Controller 对状态数据的获取.ActionResult 和 Action 的…
本文介绍 MVC 4 提供的一个新特性:捆绑(Bundle),一个在  View 和 Layout 中用于组织优化浏览器请求的 CSS 和 JavaScript 文件的技术. 本文目录 了解VS默认加入的脚本库 当我们创建一个基本模板的 MVC 工程时,VS在Scripts文件夹中默认加入了一些 JavaScript 脚本库.下面是这些脚本库的简单介绍: jquery-1.8.2.js,这个就不用解释了. jquery-ui-1.8.24.js,在jQuery 基础上的一套界面工具,包括了网页上…