13

den folgenden Code Gegeben:ActionExecutingContext - ActionParameters vs Routedata

public class MyActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var a = filterContext.ActionParameters["someKey"]; 
     var b = filterContext.RouteData.Values["someKey"];   
     base.OnActionExecuting(filterContext); 
    } 
} 

Was ist der Unterschied zwischen a und b?

Wann sollten wir mit Aktionsparameter über Routendaten werden? Was ist der Unterschied?

+4

wo ist @DarinDimitrov wenn man ihn braucht. :) – RPM1984

Antwort

14

Wenn Sie ActionParameters auf OnActionExecuting verwenden, können Sie die Werte ändern, die Fläche von der Client-Seite senden die Aktion zu verarbeiten, für Beispiel:

public class MyActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     filterContext.ActionParameters["customerId"] = 852; 

     base.OnActionExecuting(filterContext); 
    } 
} 

Wenn Sie eine Aktion mit einem customerId Parameter haben, können Sie den Wert erhalten auf dem Aktionsfilter gefassten, da die Aktion des Filters für Probe hat:

Wenn Sie eine uRL wie folgt anfordern: /customer/detail/123, werden Sie 852 Wert auf CustomerId erhalten:

[MyAction] 
public ActionResult Detail(int customerId) 
{ 
    // customerId is 852 

    return View(); 
} 

RouteData ist nur über die Werte in der URL sind, die Verarbeitung von Routing-Tabellen.

Verwandte Themen