摘要:
议题现在很多网站都与数据库进行交互。如果网站流量很大,使用SQL来检索数据会带来非常大的压力。更重要的是,用户希望在点击链接之后15秒内得到响应的内容,而在页面加载的时,显示之外滚动条下面的内容可能多数内容都是不必要的(滚动条之外没显示的部分)。为了解决这个问题,采取内容“需求点播”方式加载。页面首先会加载足够的内容,当用户在阅读并向下滚动的时候,页面会在不影响用户阅读体验的情况下继续加载更多的内容。解决方案当用户开始滚动网站内容时,使用JQuery将前期加载的内容具体数值传回异步控制器,然后按需加载相关的内容。讨论异步控制器可能是MVC程序集中迄今为止被利用最少的或最不为人所知的控制器,当然 阅读全文
摘要:
议题通常情况下,你的网站可能在大多数移动设备上都无法正常显示。当然大多数情况下是设备不够好,但是你也应该不会希望为适应手机浏览而发费很高的代价做一个全新的站点。解决方案使用Jquery Mobile NuGet package,为传统浏览器和大多数移动手机建立备选的共享布局和视图。讨论首先,假如你阅读过MVC4的技术路线图,你会发现在下一版本增加了许多关于移动化的支持,特别是接下来这个示例中包含的关于JQuery移动支持的内容。不幸的是,现在就开始期盼MVC4还为时尚早,而其中很多事情也只是表示“可能”实现。因此,为了不使等待落空,我会提供了一个简单的解决方案,将工作控制在最小的范围,创建支持 阅读全文
摘要:
议题很多自动程序会自动提交表单,在互联网上造成大量的垃圾数据,为了防止这种情况发生,我们实现了图形验证码(CAPTCHA:Completely Automated Public Turing test to tell Computers and HumansApart),当用户提交时必须要在文本框中输入图片上显示的正确的字符。解决方案在BookCommentsControllor控制器中安装ASP.NET Web Helper Library中NuGet提供的CAPTCHA。讨论包含一个新的Library Package,在窗体上添加一个CAPTCHA。Microsoft在NuGet WebH 阅读全文
摘要:
议题当你有一个页面,其中列出重要细节并希望用户可以快速而方便的填写并提交表单,而不需要重新载入整个页面,或在网站上跳转而失去当前导航的页面。解决方案使用AjaxHelper类,创建一个使用Ajax提交并自动更新现有内容的新表单。讨论下面这个例子与之前的秘诀一起,演示如果允许用户在页面没有刷新的情况下查看评论并提交评论。首先,创建新的模型用于存储书的评论。右键单击“Models”文件夹,然后选择“添加”→“类”,将其命名为“BookComment.cs”。此模型将用于提交和存储书籍的评论:using System;using System.Collections.Generic;using Sy 阅读全文
摘要:
议题单击链接的时候,由于网页刷新内容需要重新加载,会感觉整个过程变的非常缓慢,尤其在我们只需要更新少量内容的时候感觉更加明显。解决方案修改之前的示例,将Html.ActionLink 创建的链接更改为由Ajax辅助类Ajax.ActionLink创建,使链接点击时只加载需要改变的内容。讨论MVC框架提供了几个非常棒的辅助类。在目前为止本书使用最后的就是HtmlHelper类,几乎之前所有的视图类都至少使用过一次。在这个秘诀中,将使用AjaxHelper辅助类替换Books和Index视图中所有的HtmlHelper辅助类。要想实现Ajax视需要一点额外的设置才能使用的。通常情况下,也正是这点儿 阅读全文
摘要:
议题用户上传到网站上的大多数的图片都是大尺寸的照片,通常在用户想看完整图片之前网站会展示出这些图片或照片的缩略图。解决方案使用以下的类来调整上传的图片文件的宽和高:FileStream,Image,Bitmap和Graphics。讨论在下面的示例中,将修改和重组之前创建的FileUpload类。创建一个新的称为“ResizeImage”的方法来调整图片大小。调整之后的图片文件将被保存到源文件存储文件夹的子文件夹“Thumbnails”中。同时也要修改DeleteFile方法,添加同时删除原始图像和缩略图,并且为了避免重复代码要创建一个新的删除功能的方法。下面显示变化部分的类代码:using S 阅读全文
摘要:
议题同意用户将文件上传并保存到你的网站。解决方案通过HttpPostedFileBase实现将文件上传并保存到磁盘。讨论在下面这个示例中,我们将在之前创建的添加和编辑书籍的视图中添加上传一个缩略图的控件。开始,必须修改Books和Create视图表单的“enctype”以及在表单中用缩略图控件替换文本输入框。以下是修改后的视图文件:@model MvcApplication4.Models.Book@{ViewBag.Title = "Create";}<h2>Create</h2><script src="@Url.Content( 阅读全文
摘要:
议题当排序、分页和筛选不能够帮助用户找到所需的内容,下一步最好的方法就是让用户输入他所想要查找的内容。解决方案使用Html.Helper创建表单和文本输入框,在筛选器选择结果的基础上用Linq Libary使用用户输入的关键字进行查询。讨论就像之前的秘诀所做的,添加关键字搜索需要修改Books和Index视图以及BooksController控制器。在视图中创建一个新的表单,添加新的输入关键字的文本框。此外,为了在用户搜索关键字时,保持用户选择的排序、筛选器选项就需要重新编辑原有代码。下面是修改后的Book和Index视图:@model PagedList.IPagedList<MvcA 阅读全文
摘要:
议题当排序和分页不能帮助用户找到他们需要的结果,那就根据条件筛选内容的方式来帮助他们寻找。解决方案添加一个新的链接可以让用户选择预制的标准内容通过Linq Library对列表内容进行数据筛选。讨论添加筛选链接,需要修改Books视图、Index视图和BookController控制器。修改与前两个秘诀类似,添加HTML链接,内容必须是允许用户选择的内容。添加三个新链接:全部、新发布和即将发布。新发布的内容是最近两周发布的内容。即将发布的内容是预告未来发布的内容。下面是新的Books和Index视图。三个链接中都会包含排序规则的参数(以便保持当前用户的排序选项),后两个链接会包含一个名为“fi 阅读全文
摘要:
议题如果列表过长每次加载都要等很久,或者是无数的列表项中,并不都是你需要的结果。那么将列表分为多页加载,就能减少页面加载时间,尤其是要对列表进行排序,并对更快的找到结果有所帮助。解决方案在列表页面实现PagedList.MVC。讨论首先需要在从NuGet库中为应用程序添加PagedList.MVC的分页组件,它可以对完整的书籍列表进行分页展示。要安装这个软件包,请点击菜单栏“工具”→“Library Package Manager”→ “AddLibrary Package Reference”,点击窗口左侧“Online”按钮,在右上角搜索栏中输入“PagedList”,选中并点击“Page 阅读全文