ASP.NET MVC 2框架试用经验谈(1)

作者:互联网   出处:控件中国网   2014-11-05 19:04:35   阅读:2

本文将为大家介绍已经发布的ASP.NET MVC 2框架正式版的使用情况,包括缓存,静态内容的放置等等。希望本文能对大家有所帮助。

  这个月一直在用 ASP.NET MVC 2 做http://www.86e0.com/t 这个网站,用的时候是 aps.net MVC2 RC2,然后现在ASP.NET MVC 2正式版已经是发布了。 在MVC的使用上,有一些心得。下面作一下总结,希望对大家有用,也欢迎大家讨论。

  1.关于缓存

  缓存上,数据层上的缓存是必须的,这点不必多说了。

  另一个很重要的是:视图片段缓存。

  我参考了老赵的写的三篇关于片段缓存的文章:

  适合ASP.NET MVC的视图片断缓存方式(上):起步

  适合ASP.NET MVC的视图片断缓存方式(中):更实用的API

  适合ASP.NET MVC的视图片断缓存方式(下):页面输出原则

  本想用老赵的了,但是我发现ASP.NET MVC 2 的有一个新功能: Html.Partial可以返回生成的HTML, 返回的类型是:MvcHtmlString. 虽然要利用Partial View才能生成Html片段,但是我想这个已经够我用的了, 所以我做了一个这样一个Helper,主要是将生成的HTML片段缓存到Memcached里。代码如下:


public static class MvcHtmlHelper    
{    
public static MvcHtmlString MemcacheHtmlPartial(this HtmlHelper htmlHelper,int duration, string partialViewName, object model, ViewDataDictionary viewData)    
{    
object obaear = htmlHelper.ViewContext.RouteData.DataTokens["area"];    
string area=string.Empty;    
if (obaear != null) area = obaear.ToString();    
string key = string.Format("MemcacheHtmlPartial_{0}{1}", area, partialViewName);    
object ob = DistCache.Get(key);    
if (ob == null)    
{    
 MvcHtmlString mstr = htmlHelper.Partial(partialViewName, model, viewData);    
 DistCache.Add(key, mstr.ToString(), TimeSpan.FromSeconds(duration));    
return mstr;    
}    
else  
{    
 return MvcHtmlString.Create((string)ob);    
}    
 }    


  然后,我觉得,这样,在每次请求时,还是要在Controller 里把数据取出来,然后再传到 Partial View里。 既然已经缓存了,就应该不用每次请求都要在Controller里把数据取出来才对!虽然数据层会有缓存。

  所以我,能不能再省下去Controller取数据的消耗,于是又有了以下代码,其功能是:缓存Action生成的HTML到Memcached里。


public static class MvcHtmlHelper    
{    
public static MvcHtmlString MemcacheHtmlPartial(this HtmlHelper htmlHelper,int duration, string partialViewName, object model, ViewDataDictionary viewData)    
{    
object obaear = htmlHelper.ViewContext.RouteData.DataTokens["area"];    
string area=string.Empty;    
if (obaear != null) area = obaear.ToString();    
string key = string.Format("MemcacheHtmlPartial_{0}{1}", area, partialViewName);    
object ob = DistCache.Get(key);    
if (ob == null)    
{    
 MvcHtmlString mstr = htmlHelper.Partial(partialViewName, model, viewData);    
 DistCache.Add(key, mstr.ToString(), TimeSpan.FromSeconds(duration));    
return mstr;    
}    
else  
{    
 return MvcHtmlString.Create((string)ob);    
}    
 }    


  说明一下,Actionhelper的方法是在MVC原代码里提取出来的。 因为MVC2里的 Html.RenderAction方法并没有返回 MvcHtmlString的重载版。那位有更好的方法?

  其实,MVC里的Action有输出缓存,所以直接在View里用 Html.RenderAction都可以解决很多问题了。这个主要是可以用程序管理缓存。

控件中国网www.componentcn.com提示:未完待续

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat