问题标签 [onactionexecuting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
347 浏览

asp.net-mvc - 替代 StackTrace.GetFrame... 在调用方法的控制器上查找操作

设置:

我编写了一个 ASP.NET MVC 向导,最初基于 Steve Sanderson 的向导(Pro ASP.NET MVC 2 Framework)。我的巫师是普通的,是一个梦想。

每个向导步骤都是一个动作。

但是,我现在发布了一个广泛使用该向导的应用程序。显然,该应用程序处于发布模式。

WizardController<> 类是我所有向导的基类。它有一个 OnActionExecuting 方法,我怀疑它可以为我的问题提供解决方案。问题是如何,或者更确切地说,以正确的顺序遍历堆栈,问题是什么......

问题:

位于 WizardController 深处的代码使用:

获取调用此代码的操作的名称(其中 n 是我知道调用操作的框架......在调试模式下)。这使我可以确定我在哪个向导步骤/操作上。

这在调试模式下工作正常,但在发布模式下,编译器会优化我的代码。所以 n 可能代表我的堆栈中的正确帧,也可能不代表。

现实情况是,在发布模式下,有时 n 并不代表正确的帧。有时还不够好。有时是我的问题。我想要一个防弹解决方案。

问题:

那么使用堆栈跟踪的替代方法是什么?我怀疑我可以使用我的 OnActionExecuting 方法来获取操作的名称,这是我需要的,因为这个名称是我向导中的步骤的标识。

但是怎么做?

忘记存在或不存在。如何?就是那个问题。

0 投票
1 回答
2445 浏览

asp.net-mvc - 如何在不触发新请求的情况下从 Base Controller 中的 OnActionExecuting 重定向?

这个问题已经在这里问过:

如何从基本控制器中的 OnActionExecuting 重定向?

但我在接受的答案中不喜欢的是它触发了一个新请求,这意味着我再次运行基本控制器的逻辑。所以我想知道是否有一种方法可以拦截基本控制器中的请求并根据某些条件更改正在执行的控制器/动作而不会导致重定向并基本上通过完整的请求管道?我希望基本控制器确定应用程序是否设置正确,如果没有,将控制权转移到 SetupController 的 Index 操作而不触发全新的请求?

0 投票
2 回答
262 浏览

c# - C#在子构造函数中获取继承的变量(在“OnActionExecuting”中初始化)值

我有一个父类 classA ,其变量定义为public string variable. 此变量 var 在OnActionExecuting定义为的方法中初始化protected override void OnActionExecuting(ActionExecutingContext test)子类继承自此类public class classB : classA但是,下面的代码失败

也就是说,变量 var 为空。但是,如果我在 classA 中声明一个公共变量 variable2 并动态初始化它public string variable2 = "test",我可以在控制器中检索它。如何编辑此代码,以便OnActionExecuting可以在继承类的构造函数中访问发生的初始化?

0 投票
4 回答
5014 浏览

asp.net-mvc - OnActionExecuting 多次触发

我不确定这是否是解决我需要解决的问题的正确方法......但是在我创建的 OnActionExecuting 操作过滤器中,我设置了一个具有各种值的 cookie。其中一个值用于确定用户是否是第一次访问该网站。如果他们是新访问者,那么我会使用一些数据设置 ViewBag,以便我可以在我的视图中显示它。

我遇到的问题是,在我的一些控制器操作中,我执行了 RedirectToAction。结果是 OnActionExecuting 被触发两次,一次用于原始操作,第二次用于触发新操作。

这是一个典型的例子。我有一个数据驱动的网站,它根据指定的 PageID 从数据库中获取网页。如果在数据库中找不到该页面,我将用户重定向到主页。

无论如何都可以防止双重触发还是有更好的方法来设置cookie?动作过滤器用于多个控制器。

0 投票
0 回答
233 浏览

c# - 动作过滤器仅加载特定动作类型的数据

我对 MVC 做事方式相对较新,并且由于在基本控制器中加载了大量无关数据而遇到了一些性能问题。我已经阅读了一些关于操作过滤器的内容,并且想知道是否有人对如何进行操作有建议。这是我的问题:

我有一个名为 RegController 的控制器,它继承自名为 BaseController 的基本控制器。在基本控制器的 onActionExectuting 方法中,我加载了几个变量等,它们将在可见页面中使用,例如 viewbag、viewdata 等。我只需要为结果类型为 ActionResult 的 Actions 加载这些东西。在同一个 RegController 中,我还有一些 JsonResult 操作不需要加载所有这些额外信息,因为它们不加载页面或视图模板,它们只返回 Json。有没有人建议如何在现有框架功能中正确处理这个问题?我应该将这些动作放在不同的控制器中吗?我有许多具有不同功能的控制器以同样的方式拆分,我希望我可以过滤动作类型而不是将它们全部移动到 JsonResultController 或其他任何东西。

下面的代码(其中一些是伪代码):

0 投票
0 回答
1607 浏览

vba - Excel VBA无法使用onaction调用函数

我为用户窗体中的 ok 按钮编写了一个脚本,以在工作表上创建一个删除按钮以删除整行。问题是当我单击删除按钮时,它无法调用我使用 onaction 参数分配的函数。

0 投票
1 回答
1041 浏览

jquery - 如何从 MVC 控制器的 OnActionExecuting 中获取 History.js URL 的哈希部分

我有一个自定义 jQuery 控件,它使用 History.js 通过 Ajax 更改browserstate和加载子面板。在 HTML 5 浏览器中,URl 已完全更改,因此页面刷新工作(加载当前面板)。

但是在 IE9 和更早版本中,状态存储为哈希值,例如:

我想提取其中的哈希 URL(例如/SectionPanel/ListView/3OnActionExecuting,以便我可以在页面刷新时重定向到正确的起点(后退和前进按钮可以正常工作)。

基本上我希望它这样做,但即使raw URL不包含哈希部分。

如果我断点此代码,则 url 仅包含基本 URL(例如/ApplicationPanel/ListView)。

如何获取 MVC 控制器中的哈希参数?我想我可能还需要更改它们的推送方式,但以下几种变体没有帮助:

我得到一个像这样的网址:

更新:

看来这取决于 History.js 操作浏览器 url 的方式。在 HTML 4 浏览器上,它只能修改哈希标记,因此服务器永远不会看到额外的数据。

作为测试,我让插件检查哈希 URL 并将浏览器重定向到它:

虽然这适用于页面刷新,但不幸的是,浏览器页面加载无法区分页面重新加载和按下后退按钮。此代码一遍又一遍地将后退按钮发送到同一个子页面。

有什么建议么?

0 投票
0 回答
1376 浏览

asp.net-mvc - RedirectResult 和 RedirectToRouteResult 在 OnActionExecuting 中不起作用

如果地址指定为 localhost(/Account/LogIn),则 RedirectResult 和 RedirectToRouteResult 在 OnActionExecuting 内不起作用,如果我将 url 指定为http://google.com工作正常。我为管理会话编写了一个 BaseConfig 类。在工作重定向登录时 OnActionExecuting 方法url 如果会话是 null.BaseConfig 类,我在我的项目中使用如下;

0 投票
2 回答
1093 浏览

c# - 从未调用客户 ActionFilterAttribute OnActionExecuting 覆盖

我正在使用 MVC 4。

我编码这个继承自的客户属性System.Web.Mvc.ActionFilterAttribute

Manage在我的行动中使用它UserController

OnActionExecuting我在我的属性构造函数、被覆盖的方法和我的属性构造函数中放置了一个断点,UserController当我在调试模式下通过浏览器调用操作 url 时,只有我的控制器断点被触发,即使我没有经过身份验证,我也会登陆页面。. 什么我做错了吗?

预先感谢。

0 投票
1 回答
3661 浏览

asp.net-mvc-4 - Asp .Net MVC on action execution - 在执行操作时获取用户定义类型的操作参数值

我想将数据库中的每个操作方法参数名称及其对应值记录为键值对。作为其中的一部分,我使用了 OnActionExecuting ActionFilterAttribute,因为它将是获取 Action Executing 上下文的正确位置(OnActionExecuting 方法将为所有控制器操作方法调用调用)。

我正在获取 .Net 类型(字符串、int、bool)的值。但我无法获得用户定义类型(自定义类型)的值。(例如:登录模型)。我的模型可能还有一些其他嵌套的用户定义类型。

我试图获取用户定义类型的值,但我得到了唯一的类名作为字符串。我希望我们能在反思中做到。

您能否请任何人协助解决问题。因为我是反思的新手。这对我会有帮助。提前致谢。我需要在 OnActionExecuting 中获取这些类型的名称和值。

用户定义类型

我能够在 OnActionExecuting 中获取 returnUrl(登录方法参数)的值,但不能获取模型(登录方法参数)的值。我能够看到这些值,但不知道如何访问它,即使我无法获得它,我也使用了 typeof,但我需要泛型,因为我在控制器中有 20 个方法,所以我不仅可以用于 LoginModel。