Frage

Da habe ich beschlossen, lassen RC gehen, während mit Beta bleiben für jetzt habe ich keine Möglichkeit zu wissen, ob eine stark typisierte RedirectToAction hinzugefügt wurde. Hat jemand versucht, es und gibt es einen stark typisierte RedirectToAction (und vielleicht ActionLink) in RC?

War es hilfreich?

Lösung

Nein, es funktioniert nicht.

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

Das sollte funktionieren.

Andere Tipps

Dies ist auch in MVC Contrib enthalten als Erweiterung Methode auf dem Controller, zusammen mit einer Menge von andere stark typisierte Leckereien für Model Handhabung, Prüfung, usw. es lohnt sich auf die zusätzliche Abhängigkeit nehmen für das, was er anbietet.

Sie können mit return RedirectToAction(nameof(Index));

Wenn Sie nicht die volle MvcContrib Bibliothek wollen, können Sie einfach diese Funktion erhalten, indem Sie die MvcNavigationHelpers NuGet Paket.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top