如何在ASP.NET MVC页面循环中只调用一次*函数*

时间:2010-08-24 18:05:51

标签: asp.net-mvc

我有一个ASP.NET MVC Web应用程序,并且在页面加载一次时需要调用一个函数。现在我从基本控制器OnActionExecuted调用该函数。

我遇到的问题是多次调用此函数 - 一次为页面调用,然后多次调用我在页面上的不同ajax调用。我已经尝试将该函数放在Controller Initialize上,但是对于每个对控制器动作的ajax调用也会调用它。那么ASP.NET MVC页面循环中是否有一些函数只在请求页面时被调用(GET)而不是所有的ajax调用(POST)?我唯一能想到的是将所有ajax调用放在不从基本控制器继承的单独控制器中,但必须有一个更好的解决方案。

3 个答案:

答案 0 :(得分:0)

在发布问题之后我就找到了......

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
    if (Request.HttpMethod == "GET")
    {
        LoadConfiguration();
    } 
}

答案 1 :(得分:0)

根据您执行AjaxRequests的方式,您可以使用以下内容:

public ActionResult Index()
{
    if (!Request.IsAjaxRequest())
    {
        LoadConfiguration();
    }

    // Rest of Action method (snip)...
}

例如,如果您使用jQuery JavaScript library执行Ajax,它会向服务器发送一个特殊标记,表明它是一个Ajax调用(我确信其他库可以执行此操作)。如果有人更改JavaScript代码以执行GET Ajax请求,这可能会更好。


你提到的一件事确实引起了我的兴趣但“我遇到的问题是多次调用此函数” - 实际上'技术上'这不是真的。它只被调用一次....每个请求,所有这些Ajax调用被服务器视为单独的请求,就像用户通过Web浏览器请求页面一样。听起来你真正需要的是一种区分网页HTTP请求和Ajax HTTP请求的方法,因此就是上述解决方案。

答案 2 :(得分:0)

您可以在应用程序范围内(在开始时,在global.asax或其他类似方法中)执行此操作,或者在会话中存储配置对象(或者标识已经完成的标记,如果有的话没什么可存储的。)