Pergunta

Desde que eu decidi deixar RC ir ao permanecer com Beta, por agora, eu não tenho nenhuma maneira de saber se um RedirectToAction fortemente tipado foi adicionado. Alguém tentou fazê-lo e há uma RedirectToAction fortemente tipado (e talvez ActionLink) em RC?

Foi útil?

Solução

Não, isso não acontece.

protected RedirectToRouteResult RedirectToAction<T>(Expression<Action<T>> action, RouteValueDictionary values) where T : Controller
{
    var body = action.Body as MethodCallExpression;

    if (body == null)
    {
        throw new ArgumentException("Expression must be a method call.");
    }

    if (body.Object != action.Parameters[0])
    {
        throw new ArgumentException("Method call must target lambda argument.");
    }

    string actionName = body.Method.Name;

    var attributes = body.Method.GetCustomAttributes(typeof(ActionNameAttribute), false);
    if (attributes.Length > 0)
    {
        var actionNameAttr = (ActionNameAttribute)attributes[0];
        actionName = actionNameAttr.Name;
    }

    string controllerName = typeof(T).Name;

    if (controllerName.EndsWith("Controller", StringComparison.OrdinalIgnoreCase))
    {
        controllerName = controllerName.Remove(controllerName.Length - 10, 10);
    }

    RouteValueDictionary defaults = LinkBuilder.BuildParameterValuesFromExpression(body) ?? new RouteValueDictionary();

    values = values ?? new RouteValueDictionary();
    values.Add("controller", controllerName);
    values.Add("action", actionName);

    if (defaults != null)
    {
        foreach (var pair in defaults.Where(p => p.Value != null))
        {
            values.Add(pair.Key, pair.Value);
        }
    }

    return new RedirectToRouteResult(values);
}

Isso deve funcionar.

Outras dicas

Isso também está incluído na MVC Contrib como um método de extensão no seu controlador, juntamente com uma grande quantidade de outras guloseimas rigidez para um manuseamento ModelState, testando, etc. é bem a pena tomar sobre a dependência extra para que ela oferece.

Você pode usar return RedirectToAction(nameof(Index));

Se você não quer que a biblioteca MvcContrib cheia, você pode obter apenas este recurso usando a MvcNavigationHelpers pacote NuGet.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top