通过字符串名称调用JsonResult

时间:2014-06-27 14:19:58

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

我有一个控制器,它有50多个返回JsonResult类型的私有函数。我试图创建一个通用的JsonResult,它接受一个与50多个私有JsonResult函数之一相对应的名称字符串。

我想做这样的事情:

    public JsonResult View(Guid id, string funcName)
    {           
        return RedirectToAction(funcName, "myController", new { id = id});
    }

但这不会起作用,因为" RedirectToAction"返回一个ActionResult,而不是一个JsonResult。 有没有办法使这项工作?

2 个答案:

答案 0 :(得分:2)

您可以使用反射:

public ActionResult View(Guid id, string funcName)
{           
    return (ActionResult)this.GetType().GetMethod(funcName).Invoke(this, new object[]{id});
}

如评论中所述。如果是私有方法,则需要添加绑定标志:

return (ActionResult)this.GetType().GetMethod(funcName, BindingFlags.NonPublic | BindingFlags.Instance).Invoke(this, new object[]{id});

答案 1 :(得分:0)

JsonResult继承自ActionResult。您可以让View操作返回它。

public ActionResult View(Guid id, string funcName)
{           
    return RedirectToAction(funcName, "myController", new { id = id});
}

如果您的RedirectToAction行返回JsonResult,它会适当地处理它。 MVC并不关心。