首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OnActionExecuting多次触发

OnActionExecuting多次触发
EN

Stack Overflow用户
提问于 2014-03-20 19:21:13
回答 4查看 5.3K关注 0票数 1

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

我的问题是,在我的一些控制器操作中,我执行一个RedirectToAction。结果是OnActionExecuting被触发了两次,一次是针对原始操作,另一次是当它触发新操作时。

代码语言:javascript
复制
<HttpGet()>
Function Index(ByVal PageID As String) As ActionResult

    Dim wo As WebPage = Nothing

    Try
        wp = WebPages.GetWebPage(PageID)
    Catch sqlex As SqlException
        Throw
    Catch ex As Exception
           Return RedirectToAction("Index", New With {.PageID = "Home"})
       End If
    End Try

    Return View("WebPage", wp)

End Function

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

是否有可能防止双重射击反正还是有更好的方式设置一个曲奇?动作过滤器用于多个控制器。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-20 20:27:23

您可以在第一次执行时将一些标志值保存到控制器的TempData集合中,如果出现此值,则跳过筛选逻辑:

代码语言:javascript
复制
if (filterContext.Controller.TempData["MyActionFilterAttribute_OnActionExecuting"] == null)
{
    filterContext.Controller.TempData["MyActionFilterAttribute_OnActionExecuting"] = true;
}
票数 1
EN

Stack Overflow用户

发布于 2015-08-04 15:51:50

也有同样的问题。通过重写属性AllowMultiple解析

代码语言:javascript
复制
public override bool AllowMultiple { get { return false; } }

public override void OnActionExecuting(HttpActionContext actionContext)
{
    //your logic here
    base.OnActionExecuting(actionContext);
}
票数 4
EN

Stack Overflow用户

发布于 2014-03-20 20:17:02

您可以返回实际操作,而不是重定向到新操作。这样,您就不会引发http-请求,从而不会触发onactionexecuting (我相信)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22543072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档