C# 实例化ActionDescriptor
我想设计一个模型,以某种方式指定用于搜索的控制器操作。我不想将操作的url指定为字符串,因为如果该操作不存在,我不希望应用程序编译 据我所知,似乎我应该指定类型为C# 实例化ActionDescriptor,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我想设计一个模型,以某种方式指定用于搜索的控制器操作。我不想将操作的url指定为字符串,因为如果该操作不存在,我不希望应用程序编译 据我所知,似乎我应该指定类型为System.Web.Mvc.ActionDescriptor的属性,如下所示: public class myModel { public string id { get; set; } ... public ActionDescriptor search_action { get; set; } } 从中,
System.Web.Mvc.ActionDescriptor
的属性,如下所示:
public class myModel {
public string id { get; set; }
...
public ActionDescriptor search_action { get; set; }
}
从中,我了解了如何迭代所有控制器上的所有操作,但在实例化ActionDescriptor
以设置属性时遇到了问题
我希望能够做一些变化:
myModel m = new myModel();
m.search_action =
(ActionDescriptor)new myNamespace.Controllers.myController().myAction;
但是什么也没有得到
我错过什么了吗?如何将控制器操作指定为模型的属性?这可能吗?您可以在模型中声明一个委托属性,该属性包含相应的操作特定类型参数,您将使用操作设置该参数
public class myModel {
public string id { get; set; }
//Specify your specific Action's type arguments here
public Func<,> search_action { get; set; }
}
公共类myModel{
公共字符串id{get;set;}
//在此处指定特定操作的类型参数
公共函数搜索_操作{get;set;}
}
首先,我不得不问,为什么需要将动作本身存储为模型的一部分。这似乎是错误的做法;但我同样缺乏背景和理由来解释你为什么要这么做
如果只希望操作存在的编译安全性,那么最好根据控制器的类型创建一个表达式方法,并从中提取字符串
操作名称(如)
另一方面,如果您确实希望能够使用(只存储有关操作的信息)或Func
(只存储IL,而不存储名称、上下文或控制器)从模型执行此操作(即使在理解了这是多么糟糕的想法之后),这只会让您半途而废
所以我再次问,你到底为什么要这么做