public static class MyMvcExtensions
{
public static string Action<TController>(this UrlHelper urlHelper,
Expression<Func<TController, ActionResult>> action)
where TController : Controller
{
var controllerName = typeof (TController).Name;
var actionName = GetActionName(action);
return urlHelper.Action(actionName, controllerName);
}
private static string GetActionName<TController>(
Expression<Func<TController, ActionResult>> action)
where TController : Controller
{
var mce = action.Body as MethodCallExpression;
if (mce == null)
{
throw new InvalidOperationException(action.Name + " is not a valid controller action");
}
return mce.Method.Name;
}
}
Использовать так:
<a href="@(Url.Action<HomeController>(c => c.About()))">about</a>
<a href="@(Url.Action<HomeController>(c => c.Index()))">index</a>
Идея ясна, вроде, придумать дельше легко. Может кому и пригодится =)
В любом случае я советую сделать просто статический класс, расширающий UrlHelper и в котором хранить все-все ссылки в стандартном формате, которые используете в проекте, и обращаться только к нему.