Мне кажется, что вы хотите использовать строго типизированные перенаправления.Я создал статический вспомогательный класс RedirectionHelper, который имеет следующий метод:
public static string GetUrl<T>(Expression<Action<T>> action, RequestContext requestContext, RouteValueDictionary values = null) where T : Controller
{
UrlHelper urlHelper = new UrlHelper(requestContext);
RouteValueDictionary routeValues = ExpressionHelper.GetRouteValuesFromExpression(action);
if (values != null)
foreach (var value in values)
routeValues.Add(value.Key, value.Value);
return urlHelper.RouteUrl(routeValues);
}
Единственное предостережение в том, что вам придется использовать библиотеку Microsoft.Web.Mvc, доступную в Nuget.
Теперь, для вашего контроллера, создайте базовый контроллер, от которого наследуются все контроллеры, который имеет этот метод:
protected RedirectResult RedirectToAction<T>(Expression<Action<T>> action, RouteValueDictionary values = null) where T : Controller
{
return new RedirectResult(RedirectionHelper.GetUrl(action, Request.RequestContext, values));
}
Теперь в вашем действии все, что вам нужно сделать, это сказать:
return RedirectToAction<Controller>(x => x.Index());
Аналогично, вы можете написать метод расширения html, который принимает те же параметры и создает ваш тег привязки.
Как вы сказали выше, что вы хотели, когда вы изменяете имена контроллера или действия, ваш проект будетперерыв во время компиляции и покажет вам, где происходят перерывы.Однако это будет происходить только в контроллерах, так как представления не компилируются.
Надеюсь, это поможет!