MVC的20个秘方
Lin&Yi
A thousand mile trip begins with one step.
展开
-
(1)用密码保护限制对view的访问
场景 你想阻止用户访问你网站的特定页面,除非用户已经注册并且使用了用户名和密码登陆。解决方案使用一个AccountController,AccountModels 和 几个MVC View,配合ASP.NET的 AuthorizeAttribute 特性,FormsAuthentication和Membership creation/validation讨论微软的M原创 2015-10-20 14:46:58 · 349 阅读 · 0 评论 -
(6)找回忘记的密码
问题你网站的一个用户在你的网站已经注册了,但是他忘记了密码,现在需要一种方式去找回他。解决方案为了允许用户去找回他们的密码,必须在AccountController中添加一个新的action和一个新的view。这个功能将使用MemberShip类去寻找一个匹配的用户,并发送一个包含它密码的邮件到他们相关的邮箱。讨论默认情况下,MVC Internet Applications原创 2015-10-22 11:02:02 · 571 阅读 · 0 评论 -
(8)为列表结果分页
问题你有一个很庞大列表形式的结果,它加载的时间很长。或者你在这个很长的列表中不能很轻松的找到你的结果。把结果划分成多个页面将会减少页面载入的时间并且帮你更快的找到你想要的结果,特别是结果已经被排序的情况下。解决方案使用PagedList.MVC穿梭于各个记录列表页。 讨论为一个应用程序分页你需要通过NuGet Library安装一个新的DLL“pagedList原创 2015-10-22 11:02:07 · 348 阅读 · 0 评论 -
(19)URL—其实我更想懂你:路由用户到特定的Controller和Action
问题当今如此对搜索引擎霸主的争夺战是如此激烈,像下边这样的网站地址很难在这场比赛中获胜:http://www.example.com/books/details?id=4使用路由,网站可以变成这样:http://www.example.com/20-recipes-for-mvc3无论是对用户还是搜索引擎,这将提供更多的语境。解决方案使用RouteCollectionExt原创 2015-10-22 11:02:46 · 496 阅读 · 0 评论 -
(18)Auto Complete(自动完成)
问题当你查找一些特殊的东西,当你输入准确的词时,找到它可能是困难的(或者很耗时)。在输入的时候展示出结果(自动完成),使查找变得更简单。解决方案使用JQuery自动完成插件,更新现有图书列表页面上的搜索,当用户键入的时候立即显示结果。讨论自动完成插件是不会象jQuery基本库一样自动包含在MVC项目中的,所以需要做的第一件事就是的是下载插件 访问http://jquery.co原创 2015-10-22 11:02:43 · 594 阅读 · 0 评论 -
(17)卷帘式分页
问题今天很多网站与数据库交互。如果您的网站接收大量的流量,SQL查询来检索数据,是相当激烈的。更重要的是因为普通用户点击一个在15秒内到达您的网站的链接, 检索和生成内容的工作可能是不必要的,尤其是当内容是“地域折叠”(不滚动是不可见的)。为了帮助解决这个问题,内容将被“按需”载入。足够的内容将被载入,使页面感觉起来是随用户向下滚动阅读递增的,更多的内容将在不影响用户体验的场景下填充。解决原创 2015-10-22 11:02:40 · 229 阅读 · 0 评论 -
(10)根据关键字搜索
问题当排序和分页和过滤都不够帮用户去找到他们想要的结果时,想一个最好的备选方式是让用户输入(关键字)他们想要什么。解决方案用HtmlHelper创建一个新的From和 文本输入框,并且借助LINQ根据用户输入的关键字在之前过滤过的结果里查找。讨论和前边的秘方很像,添加一个根据keyword 搜索的功能需要更新 Book/Index view 和 BookController。在原创 2015-10-22 11:02:12 · 291 阅读 · 0 评论 -
(9)在结果中筛选
问题当排序和分页都不够帮用户去找到他们想要的结果时,另外一种帮助用户找到他们想要的结果的方式是根据特殊的规则过滤。解决方案添加新的links 允许使用预先的条件去过滤并且使用LINQ类库去在数据中过滤。 讨论为了添加过滤的链接,需要在Book/Index view 和BookController中做改变。改变的View和前两个秘方差不多。需要添加HTML去允许用户去选原创 2015-10-22 11:02:10 · 275 阅读 · 0 评论 -
(15)使用CAPTCHA去防止恶意软件自动提交评论
问题有种不太幸运的情况,有人用自动程序去提交表单,在整个互联网中造成大量的垃圾。为了防止这种情况的方法之一,是使用一个验证码---CAPTCHA:全自动区分计算机和人类的图灵测试,这迫使用户把生成的文字输入到文本框。(译者:CAPTCHA是一种更人性化的验证码,可以通过视觉和听觉来区分post的请求是人类还是计算机发出的)解决方案从NuGet安装ASP.NET Web Helper原创 2015-10-22 11:02:35 · 539 阅读 · 0 评论 -
(12)改变图片的大小生成缩略图
问题你允许用户上传一个图片,但是传统的来说,这个图片一般是从一个camera输出的,这个图片太大。所以你想展现一个简单的图片或者缩略图。在你的网站允许用户在他看到完整图片之前先预览缩略图(译者:这是一个很好的用户体验)。解决方案使用以下几个类去更新现有的文件上传功能去调整图片:FileStream, Image, Bitmap,和Graphics 类去指定宽度和高度。讨论在下面原创 2015-10-22 11:02:28 · 423 阅读 · 0 评论 -
(3)验证用户的输入
场景 你要确保你的表单捕获的数据包含你预期的数据,这些数据是基于你的数据库或模型设计。解决方案.NET 4.0 包含了一个新的数据注解命名空间,提供了一些有用的元数据属性类。这些类已经被应用到MVC3。对于验证表单输入,下面的属性类可以用来提供各种各样 验证选项:RequiredAttribute,RegularExpressionAttribute,RangeAttribute和 D原创 2015-10-22 11:01:59 · 324 阅读 · 0 评论 -
(13)使用Ajax Helper 提高用户体验
问题当你点击链接时,整个的网页都被重新加载。尤其是你仅仅一小点内容需要被更新时,这将被感觉是一个很慢的过程。解决方案更新之前创建的HTML.ActionLink 去调用ajax 帮助类。Ajax.ActionLink 仅仅去重新加载那些发生变化的内容。讨论MVC提供了几个给力的帮助类。到目前为止,这本书中已经广泛的应用了HTML Helper。在过去创建的所有view中,HTM原创 2015-10-22 11:02:30 · 550 阅读 · 0 评论 -
(11)通过表单上传文件
问题你希望允许用户在你的网站上传并保存文件。解决方案通过HttpPostedFileBase.实现上传文件和保存到磁盘。讨论在接下来的例子里,之前创建的去添加和更新图书的View将被更新成允许用户选择一个文件并且上传缩略图文件。作为开始,Book/Create view 应该被更新,改变From的编码类型并且为缩略图字段替换掉脚手架 textbox。代码如下:原创 2015-10-22 11:02:25 · 270 阅读 · 0 评论 -
(5)发送欢迎邮件
场景 很多网站要求人们先注册再去访问内容或者发表评论.网站如牛毛,怎么可能让人们记住每个他们注册过的网站。在注册的过程中,可以发送一个电子邮件来提醒用户他们刚刚注册了,这样,他们可能一会还会返回到你的网站。解决方案在用户注册之后使用SmtpClient和MailMessage发送邮件通知。讨论发送一个邮件之前,你需要配置一个SMTP服务器,端口,用户名和密码。为了使配置简单化,我建原创 2015-10-22 11:01:57 · 290 阅读 · 0 评论 -
(20 完结)使用缓存让你的结果加载的更快
问题随着您网站的成长,无论是普通的还是动态的内容,这两个因素导致网站载入变慢。许多用户造成了大量的web 服务器和数据库的请求。大量的数据需要强大的数据库处理能力来支持 它。为了防止花了很多钱,只需添加更多的Web服务器,更聪明的编程,以减少不必要的数据库或动态处理请求,可以明显增加你的web应用的整体速度解决方案使用OutputCacheAttribute去缓存那些不经常改变或只在具原创 2015-10-22 11:02:48 · 314 阅读 · 0 评论 -
(16)让你的网站在移动设备上同样精彩!
问题默认情况下,你的网站在移动设备上展现的可能不太好。当然,有的移动设备足够让你的网站在它上显示。但是这也不是稳妥的。可能你不希望为移动电话创建一个全新的网站,成本太高。解决方案使用jQuery mobile NuGet包,改变共享的布局和视图,并使你的网站在传统的浏览器和大部分手机展现的都很好。讨论首先,如果你一直在阅读关于4 MVC的路线图,你会注意到很多讨论是围绕着移动的原创 2015-10-22 11:02:38 · 309 阅读 · 0 评论 -
(7)为结果排序
问题你有一个很庞大的列表(例如,图书列表),你不能很容易找到你想找的东西。以列表中某一列为基础排序,可以帮助你更快的去找到你想要的东西。解决方案在book list的标题上添加一个链接。当用户点击链接的时候,使用Dynamic Linq Library去为结果排序,给予选择的列。(升序或者降序)。再点一次链接的话,就会反转顺序。 讨论和以前我用过的框架相比较,我对于在原创 2015-10-22 11:02:04 · 208 阅读 · 0 评论 -
(4)实现多语言
场景 互联网是由千百万个人使用。他们来自数百个不同的国家,使用数百种不同的语言。甚至在加拿大、美国和英国之间英语也有许多方言。所以,不在你的网站上仅仅呈现一种语言是重要的。解决方案创建资源文件,并且以键值对的形式添加静态文本,通过CurrentUICulture来提供改变语言的能力。讨论资源文件是基于文本的XML文件,用来支持静态网站多国语言。你创建一个主要的资源文件,包含你的原创 2015-10-22 11:01:54 · 312 阅读 · 0 评论 -
(2)通过脚手架自动生成controller和view ----代码先行/数据库先行
场景 你要通过你的网站管理动态内容解决方案通过使用脚手架自动生成一个controller和多个views 允许用户Create, Read, Update, and Delete(CRUD)数据。通过EntityFramework 的 code-first(代码先行) and database-first (数据库先行)方法。讨论在用脚手架搭建contorller和view之前,一原创 2015-10-22 11:01:52 · 541 阅读 · 0 评论 -
(14)使用Ajax 提交 Form表单
问题你有一个网页,列出重要的信息明细,你要允许用户迅速、轻松提交一个表单,无需重新加载整个页面,失去自己在网站上的位置。解决方案使用AjaxHelper,创建一个新的Form,用新提交的内容自动更新现有的内容。讨论下边的例子把以前的秘方放在一起,向人们展示如何让用户提交一本书的评论,而不重定向到另一个页面去看那些评论以及自己提交的评论。首先,我们需要创建一个新的model,原创 2015-10-22 11:02:33 · 381 阅读 · 0 评论