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

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

接上文:

2.关于静态内容的放置

  习惯上,静态内容会放在 mvc程序所在的目录下,比如说js,css,上传的图片等。但是这样的话,所有的静态请求都要经过 aspnet_isapi 处理,这样是非常不合算的。所以静态内容一般都会放在另外的子域上。http://www.86e0.com/t 是放在 cdn.86e0.com上。

  3.关于强类型ViewModel

  我基本上看了老赵的Asp.net MVC最佳实践。 其中有一点,就是强烈推荐使用强类型的ViewModel. 我试了一些页面,发现用强类型的ViewModel,现阶段并不适用于我。因为我是用NbearLite,从数据库抓出来的大多是DataTable. 我是觉得DataTable+NbearLite蛮方便的,虽然没有动态语言的数据访问来得方便,但是比用Entity,ViewModel, DTO,等等来说,还是可以省下很多代码。然后,最重要的是,由于我这种站经常会修改,所以数据库改变,加字段,减字段是很经常性的事。但是,用NbearLite + DataSet,DataTable,却非常方便。

  所以我觉得,做Asp.net MVC,如果你不是用DDD,DDT的话,用DataTable还是可以的。因为DDD,DDT学习起来还是要点成本的。

  4.关于URL生成

  URL生成, 老赵写了一系列文章:

  各种URL生成方式的性能对比

  各种URL生成方式的性能对比(结论及分析)

  为URL生成设计流畅接口(Fluent Interface)

  URL生成方式性能优化结果

  我直接选择

  Raw方式了, 速度最快的,才是适合我的。呵。 而不是强类型的才是适合我的。

  最后,分享一个很实用的Asp.net MVC 分页Helper.

  这个Helper引自重典老大的blog:http://www.cnblogs.com/chsword/ . 我在之前做了少少修改,现已经在http://www.86e0.com/t 上使用了。

  效果如下:

  
  请大家注意生成的 URL, 是用 ?参数=页码 的方式。代码如下:


/// <summary>    
/// 分页Pager显示    
/// </summary>    
/// <param name="html"></param>    
/// <param name="currentPageStr">标识当前页码的QueryStringKey</param>    
/// <param name="pageSize">每页显示</param>    
/// <param name="totalCount">总数据量</param>    
/// <returns></returns>    
public static string Pager(this HtmlHelper html, string currentPageStr, int pageSize, int totalCount)    
 {    
var queryString = html.ViewContext.HttpContext.Request.QueryString;    
int currentPage = 1; //当前页    
if(!int.TryParse(queryString[currentPageStr], out currentPage)) currentPage = 1; //与相应的QueryString绑定    
 var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //总页数    
var dict = new RouteValueDictionary(html.ViewContext.RouteData.Values);    
var output = new StringBuilder();    
foreach (string key in queryString.Keys)    
if (queryString[key] != null && !string.IsNullOrEmpty(key))    
dict[key] = queryString[key];    
if (totalPages > 1)    
{    
if (currentPage != 1)    
{//处理首页连接    
dict[currentPageStr] = 1;    
output.AppendFormat("<span class=\"p_home\">{0}</span>", html.RouteLink("首页", dict));    
 }    
 if (currentPage > 1)    
{//处理上一页的连接    
dict[currentPageStr] = currentPage - 1;    
output.AppendFormat("<span class=\"p_up\">{0}</span>", html.RouteLink("上一页", dict));    
}    
 else  
{    
 output.AppendFormat("<span class=\"p_disable\">{0}</span>","上一页");    
  }    
int currint = 5;    
 for (int i = 0; i <= 10; i++)    
 {//一共最多显示10个页码,前面5个,后面5个    
if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)    
 if (currint == i)    
{//当前页处理    
 output.Append(string.Format("<span class=\"p_current\">{0}</span>", currentPage));    
 }    
 else  
  {//一般页处理    
dict[currentPageStr] = currentPage + i - currint;    
output.AppendFormat("<span class=\"p_num\">{0}</span>",html.RouteLink((currentPage + i - currint).ToString(), dict));    
   }    
   }    
 if (currentPage < totalPages)    
   {//处理下一页的链接    
    dict[currentPageStr] = currentPage + 1;    
     output.AppendFormat("<span class=\"p_down\">{0}</span>", html.RouteLink("下一页", dict));    
   }    
    else  
      {    
      output.AppendFormat("<span class=\"p_disable\">{0}</span>", "下一页");    
   }    
   if (currentPage != totalPages)    
    {    
   dict[currentPageStr] = totalPages;    
     output.AppendFormat("<span class=\"p_last\">{0}</span>",html.RouteLink("末页", dict));    
   }    
    }    
  output.AppendFormat("<span class=\"p_count\">第{0}页/共{1}页</span>", currentPage, totalPages);//这个统计加不加都行    
   return output.ToString();    
  }  


  ASP.NET MVC延伸阅读

  ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET Web应用程序的一个框架。

  它由Castle的MonoRail而来.目前已经历经数个版本。ASP.NET MVC中的MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

  

  ASP.NET MVC框架是既ASP.NET WebForms后的又一种开发方式。它提供了一系列优秀特性,使ASP.NET开发人员拥有了另一个选择。ASP.NET MVC框架选项非常干净,而且容易使用。它将允许你在应用中轻易地保持关注分离,且有助于进行干净的测试和TDD。
 

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