Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
533 views
in Technique[技术] by (71.8m points)

asp.net mvc - i18n with RenderAction

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...