【问题标题】:Can MVC action method be static or extension method? [duplicate]MVC 动作方法可以是静态方法还是扩展方法? [复制]
【发布时间】:2015-11-03 18:34:24
【问题描述】:

如果我想将我的操作方法声明为静态,我可以拥有它吗?如果是,那么该怎么做,它有什么用?如果没有用,那么为什么 MVC 允许它定义呢? 例如

public static ActionResult Index()
{
  //Is it possible?
   return View();
}

如果可能的话,有人可以告诉我扩展方法的示例吗?

【问题讨论】:

  • 这背后的原因是什么?
  • 我还添加了另一个查询...它没有回答因此创建了不同的问题
  • @walther 有人问我同样的问题,我很困惑,所以想在这里分享
  • static 操作不受支持(至少在不覆盖 ActionInvoker 并造成大混乱的情况下不支持)。问题是:为什么?

标签: .net asp.net-mvc


【解决方案1】:

MVC 不允许定义它,C# 可以。仅仅因为某些结构在编程语言中是可能的,并不意味着您的框架会支持它。还有很多其他的东西可以用 C# 编写,但 MVC 会忽略或抱怨。

所以,不,没有静态动作。也没有扩展方法。扩展方法只是语法糖; C# 编译器的一个花招。编译代码后,扩展方法与任何其他静态方法没有什么不同。对它们的调用被转换为简单的静态方法调用。换句话说,即使你这样写:

myObject.extensionMethod(42);

它会被编译成这样:

ExtensionClass.extensionMethod(myObject, 42);

因此,当您的应用程序运行并启动 MVC 框架时,有关任何扩展方法的所有信息都会丢失。 MVC 无法支持“扩展方法操作”,即使它愿意,因为它无法确定哪些扩展方法适用于哪个控制器类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-29
    • 2011-11-16
    • 2011-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多