i18n with RenderAction

2019-08-31 03:25发布

问题:

I have some fragments in a view as follows:

@Html.RenderAction("Foo","Home")

Then all the controllers extends BaseController

class HomeController : BaseController{

    protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
    {
        .... // http://afana.me/post/aspnet-mvc-internationalization.aspx
    }
}

What happens is, for every RenderAction call, this is executed as well. But it doesnt need to cause they are child actions. If i have 3 RenderAction call, the above code is being executed 3 times, which it shouldn't.

I need this executed only once per request.

How can i get this done properly? Or should i put this code somewhere else?

回答1:

This is by design from ASP.NET MVC. This is a template method, and it will always be called.

However, if you want to skip code execution for performance reasons if the call is for a child action. Wrap the code with an if statement like this:

protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
    {    
      if (!ControllerContext.IsChildAction) {
       .....       
     }
}