Bạn chưa nói với chúng tôi lý do tại sao bạn cần điều này nhưng một khả năng là sử dụng phản ánh:
public List<string> ActionNames(string controllerName)
{
var types =
from a in AppDomain.CurrentDomain.GetAssemblies()
from t in a.GetTypes()
where typeof(IController).IsAssignableFrom(t) &&
string.Equals(controllerName + "Controller", t.Name, StringComparison.OrdinalIgnoreCase)
select t;
var controllerType = types.FirstOrDefault();
if (controllerType == null)
{
return Enumerable.Empty<string>().ToList();
}
return new ReflectedControllerDescriptor(controllerType)
.GetCanonicalActions().Select(x => x.ActionName)
.ToList();
}
Rõ ràng như chúng ta biết suy nghĩ không phải là rất nhanh vì vậy nếu bạn có ý định gọi phương pháp này thường bạn có thể xem xét cải thiện nó bằng cách lưu trữ bộ nhớ danh sách các bộ điều khiển để tránh tìm nạp nó mọi lúc và thậm chí memoizing phương thức cho các tham số đầu vào đã cho.
Nguồn
2012-07-03 06:18:03
Tôi sẽ đưa ra nhận xét ở đây, bởi vì nó chung chung. Đối với những gì bạn đang cố gắng làm (tên hành động điều khiển) không phải là cách mà nó nên được thực hiện. Có thể có một số hành động có cùng tên và một số có thể chỉ là Ajax, v.v. Quyền của bạn phải dựa trên những thứ khác ngoài hành động của bộ điều khiển. –