我在ASP.NET MVC4中有一个使用泛型方法的Action:
public ActionResult Test1()
{
return Generic<TestClass>();
}
public ActionResult Test2(string className)
{
MethodInfo method = typeof(ConfigController).GetMethod("Generic");
MethodInfo generic = method.MakeGenericMethod(Type.GetType(className));
generic.Invoke(this, null);
return null; // Generic<TestClass>();
}
public ActionResult Generic<T>() where T : new()
{
DatabaseUtil db = new DatabaseUtil();
ViewBag.ClassName = typeof(T).AssemblyQualifiedName;
return View("~/Views/Config/GenericConfig.cshtml", db.SelectAll<T>());
}
Test1()按预期工作,它将TestClass
传递给泛型方法,并使用适当对象的模型返回视图。
我想更进一步,只是将类名作为字符串传递,这样我就不需要为每个我想要使用的类型执行特定的操作。
Test2()工作到我返回视图的位置。我知道invoke
正在运行,因为我使用正确的类类型在Generic<T>
中找到了断点,但是从Test2()返回的仍然是传回浏览器的内容。
如何将返回委托给一般调用的ActionResult
方法?
答案 0 :(得分:2)
它就在我面前(对于反思来说还是新手):
public ActionResult Test(string className)
{
MethodInfo method = typeof(ConfigController).GetMethod("Generic");
MethodInfo generic = method.MakeGenericMethod(Type.GetType(className));
ActionResult ret = (ActionResult)generic.Invoke(this, null);
return ret;
}