13

Với đoạn mã sau: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); 
    } 
} 

sự khác biệt giữa ab là gì?

Khi nào chúng ta nên sử dụng thông số hành động trên dữ liệu tuyến đường? Sự khác biệt là gì?

+4

nơi là @DarinDimitrov khi bạn cần anh ấy. :) – RPM1984

Trả lời

14

Khi bạn sử dụng ActionParameters trên OnActionExecuting, bạn có thể thay đổi các giá trị mà khu vực gửi bởi client-side để xử lý hành động của bạn, ví mẫu:

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

     base.OnActionExecuting(filterContext); 
    } 
} 

Nếu bạn có một hành động sử dụng một tham số ID khách hàng, bạn sẽ nhận được giá trị setted trên bộ lọc hành động, vì hành động của bạn có bộ lọc, cho mẫu:

Khi bạn yêu cầu bất kỳ url như thế này: /customer/detail/123, bạn sẽ nhận được 852 giá trị trên ID khách hàng:

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

    return View(); 
} 

RouteData chỉ là về các giá trị nằm trên url, xử lý theo bảng tuyến.