‘ASP.NET MVC’ 分类的存档
[转载]在ASP.NET MVC中如何应用多个相同类型的ValidationAttribute? – Artech – 博客园. ASP.NET MVC采用System.ComponentModel.DataAnnotations提供的元数据验证机制对Model实施验证,我们可以在 Model类型或者字段/属性上应用相应的ValidationAttribute。但是在默认情况下,对于同一个类型的 ValidationAttribute特性只允许一个应用到目标元素上——即使我们将AllowMultiple属性设置为True。这篇文章的目的就 是为了解决这个问题。[源代码从这里下载] 一、一个自定义ValidationAttribute:RangeIfAttribute 为 了演示在相同的目标元素(类、属性或者字段)应用多个同类的ValidationAttribute,我定义了一个名称为 RangeIfAttribute特性用于进行“有条件的区间验证”。如下面的代码片断所示,RangeIfAttribute是 RangeAttribute的子类,应用在上面的AttributeUsageAttribute特性的AllowMultiple 属性被设置为True。RangeIfAttribute定义了Property和Value两个属性,分别表示被验证属性/字段所在类型的另一个属性名 称和相应的值,只有当指定的属性值与通过Value属性值相等的情况下我们在真正进行验证。具体的验证逻辑定义在重写的IsValid方法中。 1: [AttributeUsage( AttributeTargets.Field| AttributeTargets.Property, AllowMultiple = true)] 2: public class RangeIfAttribute: RangeAttribute 3: { 4: public string Property { get; set; } 5: public string Value { get; set; } 6: public RangeIfAttribute(string property, string value, double [...]
[转载][翻译]ASP.NET MVC 3 开发的20个秘诀(二十)[20 Recipes for Programming MVC 3]:缓存结果数据加速页面载入 – O2DS – 博客园. 议题 随着网站的发展,大量用户访问流行内容和动态内容,这两个方面的因素会增加平均的载入时间,给Web服务器和数据库服务器造成大量的请求压力。而大量的数据请求就需要强大的数据库处理能力来支撑。改进更加只能的程序,以极少不必要的数据库访问或动态处理请求,可以节省添加更多服务器的费用以及显著提高Web应用程序的整体速度。 解决方案 实现OutputCacheAttribute类,缓存不经常改变的数据或者相对固定的动作。 讨论 在MVC3中实现缓存是非常容易的事情。将下面的属性添加在某个控制器的动作上即可完成: [OutputCache (Duration=600)] 这个语句将自动缓存该视图600秒(或10分钟)共享给每个访问此页的用户。这就意味着针对代码进行简单的修改当你有1000名用户同时访问此页,只需要通过一次数据加载,可节约数以千计的数据库请求以及IIS处理负载。 输出缓存的属性看起来非常简单,但是当你打开引擎盖的时候,也可能会发现这辆车的引擎原来如此复杂。当然除非你原本就是名机械师。这个属性提供了很多关于缓存的方式,必须持续缓存时间,甚至还添加了SQL依赖,在这个秘诀中我们会深入探讨一番。 按照时间缓存非常简单,你只需要告诉MVC视 图应该被缓存多少秒即可。至于缓存存储的位置,是客户端浏览器还是服务器或者是它们的组合,这个问题稍微有点复杂。一个好的做法是首先分析被缓存的内容数 据,如果是缓存多个用户共享的数据,缓存到服务器上更为合适;然而如果是个人数据,比如个人定制的网页,还是将其缓存在用户的浏览器中更好。虽然缓存可以 说是个伟大的发明,但是它也是有局限性的。通常情况下,缓存的最大限制是内存,不是一切都可以缓存在服务器上。 然而,最有趣的方式还是SQL依赖。OutputCache允许数据一直被缓存,直到它在数据中的内容发生了实际的变化,这是一个非常有用的功能。就拿图书来举例,新书并不是经常增加的,因此可以为图书设置一个缓存时间(例如24小时)。但是,如果在缓存过期之前添加了一本新书,又或者是在漫长的一周或几天里根本就没有添加新书?第一种情况,添加一本新书不能及时出现,用户是会不高兴的。而第二种情况,因为没有新书被添加,每天都要发起不必要的服务器请求。使用SQL依赖的方式,像我们希望的那样,当图书的表发生变化时缓存能被立即更新。 这是一个非常棒的功能,在其他编程语言中,你需要手动控制缓存,你需要自己手动更新无效缓存。相信我,这很容易就会让你错过一两个应该正常清除的缓存。 在接下来的示例中,将缓存图书列表页面。默认情况下,如果没有设置VaryByParam的值,MVC3将会自动创建一个唯一的缓存对象。这是个相当棒的功能,按二在这本书上面的例子里,搜索关键字也会作为输入参数之一,但是可能输入数以百计不同的关键字组合,所以这个变量不应该被缓存(这就是上面提高的会产生内存警告的问题)。下面修改后启用缓存的BooksController控制器: using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Linq.Dynamic; using System.Web; using System.Web.Mvc; using MvcApplication4.Models; using MvcApplication4.Utils; using PagedList; namespace MvcApplication4.Controllers { [...]
[转载]Asp.net MVC 利用PartialView 构造自定义菜单 – 胡以谦 – 博客园. 在VS2010中利用ASP.NET MVC自带的模板生成的菜单是固定的,没办法更改,下面利用PartialView实现简单的一级菜单。 1) 修改_Layout.cshtml,在<nav>部分改成@{ Html.RenderAction(“Menu”, “Home”);} ? <div class=”float-right”> <section id=”login”> @Html.Partial(“_LogOnPartial”) </section> <nav> @{ Html.RenderAction(“Menu”, “Home”);} </nav> </div> MVC将会调用HomeController的Menu方法来显示菜单 2)在HomeController里面添加Menu方法,返回PartialView public PartialViewResult Menu() { List<MenuItem> menus = new List<MenuItem>(); menus.Add(new MenuItem{ Text=”Home”, Controller=”Home”, Action=”Index”}); menus.Add(new MenuItem { Text = “Job”, Controller = “Job”, Action = “Index” [...]
[转载]ASP.NET MVC把字符串格式化成URL的方法 – 兔纸 – 博客园. 兔纸 只有试着去欣赏她,对她时刻保持着好奇心,你才能真正的了解她。她,就是艺术。 ASP.NET MVC把字符串格式化成URL的方法 在ASP.NET MVC中URL Routing是一个很好的规范URL的方法.但有时候您也许会需要把指定的字符串格式化成正常和安全的URL.我们都知道,一般域名注册的要求是只能有 数字.字母和横线的,而我们常常会用到数据库中的信息作为Url中的一部分比如定位到文章作者页面的时候,常常会把作者的名字包含进去. 假如作者的名字叫tu zhi. 作者信息页面的URL假设是这样:<a href=”http://www.cnblogs.com/tu zhi”>兔纸</a>,其中tu zhi是从数据中取得的作者名称. 如果我们请求这条链接的时候,我们发现跳转后的地址是这样的:http://www.cnblogs.com/tu%20zhi 这样URL就会显得非常的不美观,也显得不规范.我们的目标是把它转换成http://www.cnblogs.com/tu-zhi 如果您说这也没什 么啊?我看%20就比较好看, 那么当作者姓名为tu&zhi的时候是什么情况呢? 有兴趣的话您可以试试看,闲话不多说了,直接进入正题. 对这种字符串的处理方法很简单,一个方法足矣: /// <summary> /// 转换成url /// </summary> /// <param name=”text”>文本</param> /// <returns>url字符</returns> public static string ToUrlName(this string text) { if (text == null) throw new Exception(“Can’t Url convert a null [...]
[转载][翻译]ASP.NET MVC 3 开发的20个秘诀(十七)[20 Recipes for Programming MVC 3]:卷帘式分页加载 – O2DS – 博客园. 议题 现在很多网站都与数据库进行交互。如果网站流量很大,使用SQL来检索数据会带来非常大的压力。更重要的是,用户希望在点击链接之后15秒 内得到响应的内容,而在页面加载的时,显示之外滚动条下面的内容可能多数内容都是不必要的(滚动条之外没显示的部分)。为了解决这个问题,采取内容“需求 点播”方式加载。页面首先会加载足够的内容,当用户在阅读并向下滚动的时候,页面会在不影响用户阅读体验的情况下继续加载更多的内容。 解决方案 当用户开始滚动网站内容时,使用JQuery将前期加载的内容具体数值传回异步控制器,然后按需加载相关的内容。 讨论 异步控制器可能是MVC程序集中迄今为止被利用最少的或最不为人所知的控制器,当然也有可能是不知道怎么用它。以下内容是摘抄自MSDN网站的介绍信息: 在 可能出现线程不足的应用程序中,您可以配置通过异步方式处理操作。异步请求与同步请求所需的处理时间相同。例如,如果某个请求生成一个需要两秒钟来完成的 网络调用,则该请求无论是同步执行还是异步执行都需要两秒钟。但是,在异步调用的过程中,服务器在等待第一个请求完成的过程中不会阻塞对其他请求的响应。 因此,当有许多请求调用长时间运行的操作时,异步请求可以防止出现请求排队的情况。 在这个示例中,使用异步请求将是个完美的解决方案,当新用户在发起更为重要的请求时,它将会自动释放IIS资源,因为其中用户的大多数“需求点播”是不太重要的,因为大多数人甚至不会注意到正在加载的额外的内容。 在大多数社交网站中,用户的批注信息更多可能包含的是活动信息。在以前的秘诀中,实现了为书记添加评论的功能。在这个例子中,将会修改页面,列出最近的评论。当用户为了查看更多的评论,他们就会开始滚动,一旦用户开始滚动页面,就发起Ajax请求,请求异步控制器获取剩余部分评论。 首先,修改Home/Index视图,使其显示最近的评论信息。提供书籍最近的相关评论并显示查看书籍基本资料的相关链接。创建新的控制器用来显示评论,这个视图将会调用render方法来显示剩下的信息。 @model IEnumerable<MVCApplication4.Models.BookComment> @{ ViewBag.Title = “Home Page”; } <h2>@ViewBag.Message</h2> <p> To learn more about ASP.NET MVC visit <a href=”http://ASP.NET/mvc” title=”ASP.NET MVC Website”> http://asp.net/mvc </a>. </p> <script type=”text/JavaScript”> [...]

