zoukankan      html  css  js  c++  java
  • [ASP.NET MVC]让Html.RenderAction支持Lamda表达式

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

    @{Html.RenderAction("RecentNews")}

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

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

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

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

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

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

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

    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)。

  • 相关阅读:
    翻转链表二
    最短路径算法
    在二叉树中插入节点
    LightOJ 1341
    串的基本操作
    链队列的基本操作
    LightOJ 1370
    poj 3060 Visible Lattice Points
    欧拉函数介绍及简单模板
    zoj 3593 One Person Game
  • 原文地址:https://www.cnblogs.com/dudu/p/html_renderaction_lamda.html
Copyright © 2011-2022 走看看