我有一个控制器,它有50多个返回JsonResult类型的私有函数。我试图创建一个通用的JsonResult,它接受一个与50多个私有JsonResult函数之一相对应的名称字符串。
我想做这样的事情:
public JsonResult View(Guid id, string funcName)
{
return RedirectToAction(funcName, "myController", new { id = id});
}
但这不会起作用,因为" RedirectToAction"返回一个ActionResult,而不是一个JsonResult。 有没有办法使这项工作?
答案 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并不关心。