乱世重典

--得天道之垂青 破地道之迂腐 尽人道灵性 

用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
chsword的公告
<h3 class="faceListTitle">个人信息</h3> <ul> <li><img alt="" src="http://images.cnblogs.com/cnblogs_com/chsword/173555/r_MVP_Horizontal_FullColor_182_74.png" border="0"></li> <li><a href="https://mvp.support.microsoft.com/profile=B0DB424E-CC94-475F-B556-4CBE37E10A05" target="_blank">MVP配置</a></li> <li>最有影响力开发者</li> <li>MSN:chsword@126.com</li> <li><a href="http://www.eice.com.cn">CHSNS#1.2开源版本</a></li> <li> <a href="http://www.eice.com.cn/">CHSNS#官网</a> </li> <li> <a href="http://www.eice.com.cn/AspnetMvcPreview4.ashx">Asp.net Mvc类库说明</a> <img src="http://www.qilvr.com/line/details_6d525919-c722-43f3-802d-8f6c9d952f4e.htm" style="width:0px" /> <img src="http://www.eice.com/" style="width:0px" /> </li> </ul> <script type="text/javascript"> var TAXS_id="35742_15096_37766"; var TAXS_size="188x66"; var TAXS_formal="2"; </script> <script type="text/javascript" src="http://go.ae.tenpay.com/js/pull.js"></script> <script type="text/javascript" src="http://js.tongji.cn.yahoo.com/744607/ystat.js"></script>
文章分类
My Friends'
@缘分天空~心语交融@(RSS)
十三太饱(昊)(RSS)
右边肩膀(RSS)
咫藉之地(RSS)
工程粮甜(RSS)
忆尘谷(RSS)
成幻互联
成幻重典(RSS)
海龙师弟的BLOG
独唱情歌(RSS)
神秘之星--爱奥(RSS)
存档

原创  ASP.NET MVC雕虫小技 1-2 收藏

 

看到AnyTao和TerryLee分享的关于ASP.NET MVC使用和优化的技巧,不免手痒,也分享一下这一年多来ASP.NET MVC开发的积累。

其中未必是一些高效的技巧,但是的确是能解决问题,也未必有什么高深的原理,只是我觉得值得分享。

1.Controller来控制HTML的Title

我想大部分朋友都有在Controller里面指定Html页面Title的需求。

我习惯于先写使用的代码再去完善其实现,而指定一个Title最方便的形式莫过于:

   1: public ActionResult Index(int id) {
   2:     var article=Db.GetArticle(id);//获取数据库里的文章
   3:     Title=article.Name;
   4:     return View();
   5: }

当然,这段代码是不能执行的,因为Controller并没有内建的Title属性,不过没关系,我们可以自定义一个:

   1: abstract public class MyBaseController : Controller {
   2:        public string Title {
   3:            set {
   4:                ViewData["Page_Title"] = value;
   5:            }
   6:        }
   7: }

然后将我们的Controller换为这个MyBaseController,之后在Master中写ViewData[“Page_Title”]的输出就好了。

   1: <title><%=ViewData["Page_Title"] %></title>

OK,这个愿意实现了。

当然做SEO的话Keyword和Description也可以这样来搞。

2.ViewModel中传递Controller中定义的上下文

老赵十分推ViewModel于是我也做了不少这方面的实践,发现的确不错。但是有个问题,就是Controller中产生的上下文怎么传到View中去,比如说自定义的用户信息,等一些非static的类型,而我又不想到View中再实例化一遍。

解决方法:ViewModel中另加一上下文属性(在我和程序中这些上下文继承于IContext接口,而在Controller中它的属性是CHContext)

   1: public class HomeIndexViewModel {
   2:     public IContext Context { get; set; }//这个属性就是解决它的方法
   3:     public string Message { get; set; }
   4: }

而我在Controller中:

   1: public ActionResult Index() {
   2:     HomeIndexViewModel model = new HomeIndexViewModel {
   3:         Context = CHContext,//这里传递
   4:         Message="Welcome to ASP.NET MVC!"
   5:     };
   6:     return View(model);
   7: }

而View中:

   1: <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
   2: Inherits="System.Web.Mvc.ViewPage<HomeIndexViewModel>" %>
   3: <asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
   4:     Home Page
   5: </asp:Content>
   6: <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
   7:     <h2><%= Html.Encode(Model.Message) %></h2>
   8: </asp:Content>

这样我们就可以实现将Controller中产生的自定义上下文传递了。不过每个ViewModel都初始化一个IContext,未免太过频繁, 也累人,于是进一步改进,我们利用作用在Controller上的Filter,在Controller的基类我们自定义的 MyBaseController中写如下Filter,而实现这个功能则要所有的ViewModel继承于一个类:MyBaseViewModel:

MyBaseViewModel与Model:

   1: public class MyBaseViewModel {
   2:     public IContext Context { get; set; }
   3: }
   4:  
   5: public class HomeIndexViewModel:MyBaseViewModel {
   6:     public string Message { get; set; }
   7: }

Controller与Filter

   1: abstract public class BaseController : Controller {
   2:     protected override void OnResultExecuting(ResultExecutingContext filterContext) {
   3:         var m = ViewData.Model as BaseViewModel;
   4:         if (m != null){
   5:             m.Context = CHContext;//在这里初始化
   6:         }
   7:     }
   8: }

这回我们在Controller里使用时就清爽了,不用再传递CHContext了。

如有意见欢迎提出

发表于 @ 2009年05月08日 16:50:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:ASP.NET MVC 重点教程一周年版 总结:ASP.NET MVC模型 | 新一篇:ASP.NET MVC雕虫小技 3、Pager

  • 发表评论
  • 评论内容:
  •  
Copyright © chsword
Powered by CSDN Blog