【问题标题】:"Action" in Asp.Net MVCAsp.Net MVC 中的“动作”
【发布时间】:2014-09-24 13:36:28
【问题描述】:

我知道我在问一个奇怪的问题,但我不得不质疑这个问题,因为这个问题在我脑海中很久了。

当我们写"A"时使用Visual Studio,同时创建新的"Actionresult",即当我们

在public ActionResult YouAction(){...}第一个写'ActionResult'

出现的 IntelliSense 帮助是 "Action",我的问题是

"Action" 在Asp.Net MVC,在 我作为Asp.Net MVC 开发人员的 10 个月职业生涯我没有使用它,但是

看它的名字"Action"我认为它只与MVC有关。

谢谢..!!

【问题讨论】:

  • Action 和 Action<T> 出现在上下文菜单中是代表。正如@AshwiniVerma 所写,它们与ActionMethods 没有任何共同之处。
  • @Ghukas...thankzz..for comment..could be plz explain by answer below..
  • Action 与 MVC 无关,它们是 .NET 框架基类的一部分,可用于任何 .net 环境(Windows 窗体、控制台应用程序、WebForms、MVC 等)。请参阅本文有关操作的信息blogs.msdn.com/b/brunoterkaly/archive/2012/03/02/…

标签: asp.net-mvc-2


【解决方案1】:

Action(和它的兄弟Action<T>)是.NET 框架中预定义的delegate 类型。它的存在是为不返回值的函数调用提供标准接口。有一个表亲 delegate 类型称为 Func<TResult>,它返回一个 TResult 泛型类型。

这些代表有两种风格,通用和非通用。非泛型Action 不带参数,并返回void。泛型类型的泛型Action can take up to 16 parameters作为参数(但也不返回值)

Func<TResult> 也是如此,除了所有版本都是通用的。它可以take 0 to 16 generic parameters 并返回一个泛型类型。

在“过去”中,要使用委托,您必须先定义delegate,然后再使用它。像这样:

public delegate void ShowValue();

那就这样用吧……

ShowValue showMethod = testName.DisplayToWindow;
showMethod();

但是有了一个动作,你只需要这样做:

Action showMethod = delegate() { testName.DisplayToWindow();} ;
showMethod();

另一个好处是匿名 lambda 本质上与 Action 或 Func<TResult> 兼容,因此您可以这样做:

Action showMethod = () => testName.DisplayToWindow();
showMethod();

这有很多很好的便利,但更重要的是微软创建了这些delegate 类型,以便他们自己的框架能够使用标准接口。您也可以在自己的代码中利用这些类型。

【讨论】:

    【解决方案2】:

    Action 是 System.Action 命名空间的委托。

    MSDN:封装一个只有一个参数且不返回值的方法。

    这不是 ActionMethods 寻找的 MVC 的内置操作结果类型之一。

    • 查看结果
    • 部分查看结果
    • 重定向结果
    • RedirectToRouteResult
    • 内容结果
    • JsonResult
    • JavaScriptResult
    • 文件结果
    • 空结果

    更新

    现在为什么要使用 Action 委托?请通过这篇文章。 Uses of Action delegate in C#

    【讨论】:

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