Pregunta

Desde que he decidido dejar RC ir durante su estancia con Beta por ahora, no tengo manera de saber si un RedirectToAction fuertemente tipado se ha añadido. Cualquiera ha intentado y no es un RedirectToAction fuertemente tipado (y tal vez ActionLink) en RC?

¿Fue útil?

Solución

No, no lo hace.

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);
}

Eso debería funcionar.

Otros consejos

Esto también se incluye en MVC Contrib como un método de extensión en el controlador, junto con una gran cantidad de otras golosinas inflexible de tipos para el manejo ModelState, pruebas, etc. vale la pena tomar en la dependencia extra para lo que ofrece.

Puede utilizar return RedirectToAction(nameof(Index));

Si no desea que la biblioteca MvcContrib completa, se puede obtener sólo esta característica mediante el uso de la MvcNavigationHelpers paquete NuGet.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top