I don't really like the magic strings in the RedirectToRoute and Action methods. Not to worry, its pretty easy to get rid of them by extending the Controller class and adding some additional helper methods so you get the following experience:

return RedirectToAction<HomeController>(x => x.RegisterSuccess());

and

<a href="<%= Url.Action<HomeController>(c => c.Index()) %>" title="About"><span>About</span></a>

Here is the implementation:

public class Controller : System.Web.Mvc.Controller
{
    public TempDataDictionaryExtensions.TempModelContext<T> TempModel<T>()
    {
        return TempData.Model<T>();
    }

    public RedirectToRouteResult RedirectToAction<TController>(Expression<Func<TController, object>> action)
    {
        return RedirectToAction(GetActionName(action), GetControllerName<TController>());
    }

    public RedirectToRouteResult RedirectToAction<TController>(Expression<Func<TController, object>> action, object routeValues)
    {
        return RedirectToAction(GetActionName(action), GetControllerName<TController>(), routeValues);
    }

    public static string GetControllerName<TController>()
    {
        var type = typeof(TController);
        return type.Name.Remove(type.Name.Length - 10);
    }

    public static string GetActionName<TController>(Expression<Func<TController, object>> action)
    {
        try { return action.GetMethodName(); } 
        catch (ExpressionExtensions.ExpressionMissingMethodException e)
        { throw new Exception("Action must be a method on the controller.", e); }
    }
}
public static class UrlHelperExtensions
{
    public static string Action<TController>(this UrlHelper helper, 
                                             Expression<Func<TController, object>> action) 
                                                where TController : ControllerBase
    {
        return helper.Action(action.GetMethodName(), Controller.GetControllerName<TController>());
    }

    public static string Action<TController>(this UrlHelper helper, 
                                             Expression<Func<TController, object>> action, 
                                             object routeValues) where TController : ControllerBase
    {
        return helper.Action(action.GetMethodName(), 
                             Controller.GetControllerName<TController>(), 
                             routeValues);
    }
}
public static class ExpressionExtensions
{
    public class ExpressionMissingMethodException : Exception
    {
        public ExpressionMissingMethodException() : 
            base("Expression must call a method.") {}
    }

    public static string GetMethodName<T, TReturn>(this Expression<Func<T, TReturn>> method)
    {
        if (!(method.Body is MethodCallExpression))
            throw new ExpressionMissingMethodException();
        return ((MethodCallExpression)method.Body).Method.Name;
    }
}