【问题标题】:c# mvc render a controller's action - by string namec# mvc 渲染控制器的动作 - 通过字符串名称
【发布时间】:2010-12-21 00:08:19
【问题描述】:

我正在尝试使用 MVC 框架,尝试一些概念验证的想法。这不是生产代码..

无论如何 - 我有一个匿名控制器。我想在那个控制器上执行一个动作,但是,我只有这个控制器的动作名称作为字符串可用。

如何通过字符串名称呈现控制器的操作?

谢谢大家!

弗兰科

【问题讨论】:

  • 你如何拥有匿名控制器?
  • render 是什么意思?
  • render 是一个错字 - 我的意思是执行操作。 RE:匿名 - 我知道该对象继承自控制器,但不确定是什么类型(例如 AccountController、HomeController 等)
  • 但不确定运行时是什么类型(例如,AccountController、HomeController 等)

标签: c# asp.net-mvc


【解决方案1】:

您有多种选择:

  • Asp.net MVC 2 Beta 2(曾经是 MVC Futures 的一部分)内置了 RenderAction() 用于这些目的
  • MVC Contrib 中使用子控制器实现了类似的东西
  • 或者您可以使用PartialRequest() 解释here

但你必须小心,因为它们都有问题。

尽管如此。您的 匿名 控制器可能会成为主要障碍。但这取决于您拥有它的方式以及您如何访问它。如果您向我们展示一些代码会更容易,这样我们就可以更深入地了解您的问题。

【讨论】:

  • 嗨罗伯特 - PartialRequest() 正是我需要的 - 谢谢!
【解决方案2】:

不确定匿名控制器?但是……

如果您查看 codeplex 上的 MVC futures 项目,他们有一个 Html.RenderAction

善良,

【讨论】:

  • 嗨,Dan - 感谢您的帮助我知道这一点,但它不太符合我的需求。不过谢谢!
【解决方案3】:

虽然我相信你的想法可能不是最优的,但你可以使用这段代码:

var controller = new SomeController(null);
var controllerContext = new ControllerContext(new HttpContextWrapper(System.Web.HttpContext.Current),new RouteData(),controller);
var actionInvoker = new ControllerActionInvoker();
actionInvoker.InvokeAction(controllerContext, "Test");

如果您需要有关此代码如何工作的更多详细信息,请查看 Reflector 中的 System.Web.Mvc。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多