[ASP.NET MVC]让Html.RenderAction支持Lamda表达式_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > [ASP.NET MVC]让Html.RenderAction支持Lamda表达式

[ASP.NET MVC]让Html.RenderAction支持Lamda表达式

 2013/7/19 18:58:14  蒋叶湖  博客园  我要评论(0)
  • 摘要:今天在ASP.NETMVC代码时用到了Html.RenderAction,代码如下:@{Html.RenderAction("RecentNews")}通过字符串指定Action的名称,有两点不爽:1.输入时不能智能感知;2.输错了不能实时提示。有这两点不爽,写代码的乐趣就大减。有享受感觉的代码应该是这样的:@{Html.RenderAction<AggSiteController>(c=>c.RecentNews());}是的,Lamda,给你写代码带来畅快感觉的Lamda
  • 标签:.net ASP.NET MVC net AMD 表达式
 

今天在ASP.NET MVC代码时用到了Html.RenderAction,代码如下:

@{Html.RenderAction("RecentNews")}

通过字符串指定Action的名称,有两点不爽:

1. 输入时不能智能感知;

2. 输错了不能实时提示。

有这两点不爽,写代码的乐趣就大减。有享受感觉的代码应该是这样的: 

@{Html.RenderAction<AggSiteController>(c => c.RecentNews());}

是的,Lamda,给你写代码带来畅快感觉的Lamda!

微软不让我们享受,我们就自己动手,丰衣足食。自己写一个支持Lamda表达式的Html.RenderAction,代码如下:

class="cnblogs_code_copy">复制代码
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Linq.Expressions;

namespace System.Web.Mvc.Html
{
    public static class HtmlHelperExtensions
    {
        public static void RenderAction<TController>(this HtmlHelper htmlHelper, 
            Expression<Action<TController>> operation) 
            where TController : Controller
        {
            var actionName = ((MethodCallExpression)operation.Body).Method.Name;
            htmlHelper.RenderAction(actionName);
        }
    }
}
复制代码

注:其中"((MethodCallExpression)operation.Body).Method.Name"代码来自Get Method Name From Action。

顺带分享一篇文章When to use Html.RenderPartial and Html.RenderAction in ASP.NET MVC Razor Views,通过这篇文章你可以清楚的知道Html.RenderPartial与Html.RenderAction之间的区别。

比如:博客园首页的最新随笔列表就适合用Html.RenderPartial,而右侧的“新闻列表”就适合用Html.RenderAction。

简单的理解就是:Html.RenderPartial用的到PartialView只用一次(虽然实际可以多次使用,但比较麻烦,每次都要传Model),Html.RenderAction用的到PartialView被多个视图使用(有自己的Action提供Model)。

发表评论
用户名: 匿名