私は変えようとしています
@{Html.RenderAction("Foo", "TheAction");}
に
@{Html.RenderAction((FooController c) => c.TheAction );}
これは多くの点で優れていますが、改善されます。
- F12-ナビゲーション
- タイプ使用状況の検出(リシャーパーなど)
- メソッド使用状況の検出
- 厳格さ
- ...デッドリンクをプロジェクトから遠ざける可能性
...だから私はこのような拡張クラスを書きました:
using System;
using System.Linq.Expressions;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Web.Mvc;
using System.Web.Mvc.Html;
namespace V3NET.MVC.Extensions
{
    public static class HtmlHelperExtension
    {
        public static void RenderAction<T>
            (this HtmlHelper helper, Expression<Func<T, Func<int, int?, ActionResult>>> action)
        {
            var actionName =
                (
                    (MethodInfo)
                    (
                        (ConstantExpression)
                        (
                            (MethodCallExpression)
                            (
                                ((UnaryExpression)action.Body).Operand
                            )
                        ).Object
                    ).Value
               ).Name;
            var controllerType = action.Parameters[0].Type;
            var controllerName = new Regex("Controller$").Replace(controllerType.Name, "");
            helper.RenderAction(actionName, controllerName);
        }
    }
}
...しかし、ご覧のとおり、int、intを実行するアクションに固有の記述を行う必要がありますか?引数として。
これをより一般的に表現するには、無数のオーバーロードを記述する必要がないようにするにはどうすればよいですか?