我有一个ASP.NET MVC Web应用程序,并且在页面加载一次时需要调用一个函数。现在我从基本控制器OnActionExecuted调用该函数。
我遇到的问题是多次调用此函数 - 一次为页面调用,然后多次调用我在页面上的不同ajax调用。我已经尝试将该函数放在Controller Initialize上,但是对于每个对控制器动作的ajax调用也会调用它。那么ASP.NET MVC页面循环中是否有一些函数只在请求页面时被调用(GET)而不是所有的ajax调用(POST)?我唯一能想到的是将所有ajax调用放在不从基本控制器继承的单独控制器中,但必须有一个更好的解决方案。
答案 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或其他类似方法中)执行此操作,或者在会话中存储配置对象(或者标识已经完成的标记,如果有的话没什么可存储的。)