i18n with RenderAction

人走茶凉 提交于 2019-12-12 01:41:53

问题


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) {
       .....       
     }
}


来源:https://stackoverflow.com/questions/23277959/i18n-with-renderaction

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!