私は変えようとしています
@{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を実行するアクションに固有の記述を行う必要がありますか?引数として。
これをより一般的に表現するには、無数のオーバーロードを記述する必要がないようにするにはどうすればよいですか?