【发布时间】:2011-07-05 10:45:37
【问题描述】:
我正在尝试创建一个基于控制器名称和操作名称创建 url 的方法。我不想使用魔术字符串,所以我在考虑一种将 lambda 表达式作为参数的方法。
棘手的部分是,我不想在操作方法上指定任何参数。例如,如果我有这个控制器:
public class HomeController : IController
{
public Index(int Id)
{
..
}
}
我想这样调用方法:
CreateUrl<HomeController>(x=>x.Index);
我想出的方法的签名是:
public string CreateUrl<TController>(Expression<Action<TController>> action) where TController : IController
但这并不能解决跳过参数的问题。我的方法只能用这样指定的参数调用:
CreateUrl<HomeController>(x=>x.Index(1));
是否可以在控制器上指定动作或方法而无需设置参数?
【问题讨论】:
-
如果你需要这个,你很可能做错了什么。使用 ASP.NET MVC 扭转手臂
-
您应该尝试使用此表达式类型
Expression<Func<TController, Func<ActionResult>>>,您将能够省略括号c => c.Index。
标签: c# asp.net-mvc expression-trees