C#使用泛型调用作为MVC ActionResult

时间:2016-05-05 14:37:19

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

我在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方法?

1 个答案:

答案 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; 
}