实例化ActionDescriptor

时间:2014-02-24 16:50:03

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我想设计一个模型,用某种方式指定用于搜索的Controller Action。我不想将操作的url指定为字符串,因为如果该操作不存在,我不希望应用程序编译。

据我所知,似乎我应该像这样指定System.Web.Mvc.ActionDescriptor类型的属性:

public class myModel {
    public string id { get; set; }
    ...
    public ActionDescriptor search_action { get; set; }
}

this SO post我看到如何遍历所有控制器上的所有操作,但我无法实例化ActionDescriptor来设置属性。

我希望能够对此做一些修改:

myModel m = new myModel();
m.search_action = 
    (ActionDescriptor)new myNamespace.Controllers.myController().myAction;

但没有到达任何地方。

我错过了什么吗?如何将Controller Action指定为模型的属性?这甚至可能吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Action设置的模型中的相应操作特定类型参数声明Func委托属性。

public class myModel {
    public string id { get; set; }
    //Specify your specific Action's type arguments here
    public Func<,> search_action { get; set; }
}

答案 1 :(得分:0)

首先,我不得不问为什么你需要将动作本身存储为模型的一部分。这似乎是错误的做法;但同样,我缺乏关于你为什么要这样做的背景和理由。

如果只想让操作存在的编译安全性,最好根据控制器的类型创建表达式方法,并从中提取string操作名称(如this answers suggest })。

如果另一方面,你实际上希望能够使用ActionDescriptor(仅存储有关动作的信息)或者从模型中执行此操作(即使在了解了这个想法有多糟糕之后)一个Func<,>(只存储IL,而不是名称,上下文或控制器),只会让你到一半。

同样,我问,为什么你需要这样做?