Thinking about this problem passively, I think the issue does make sense. The reproducible code I attached above basically has a static DirectMethod in a UserControl, that is registered on the main .aspx page.
Now knowing that Static DirectMethods does neither postback ViewState, nor does they load server-side controls on the server, probably what is happening is, that on the server-side in the Ajax call, the Ext.Net framework does not load up the UserControl that hosts the static AjaxMethod and therefore throws the error as stated above in the opening post of the thread.
But the framework fails to relocate the method again in the Ajax call, as it does not load up controls for static methods.
I had raised this issue much before also:
However, I always thought that it was a conflict of DNN with Coolite. And never realized on that thread also, that there also, the issue was being caused by static Ajax Methods (needless to mention inside Usercontrols, because all DNN modulesa re inherently a collection of UserControls by design). I have successfully used non-static AjaxMethods in DNN usercontrols also, and so the issue in the above mentioned thread is also existent for static Ajax Methods only.
Moving forward, I think this might be a major feature request from the Ext.Net team (I am mixing Coolite/Ext.Net in this post, because the issues and threads being discussed span both the brand timeframes).
And this should not be too difficult also. If a static Ajax Method is in a UserControl, the Ext.Net framework can just register this as a flag, together with the server-location of the UserControl's .ascx file.
Then in the Ajax call, load the UserControl, and just invoke the static AjaxMethod on it (without needing to add the loaded UserControl to any control collection). As the method is static, there is no question of life-cycle events, or loading ViewStates, and so there is no need of adding the loaded UserControl to control collection of some parent.
I think the last piece in this puzzle should be, how do you access the LoadControl method in a static context (needed for accessing the UserControl). Although there can be quick-and -dirty hacks for this, but another approach could be to just instantize the UserControl's class directly through its assembly in the Ajax call. What I mean is,
Object o = new UserControl();
Again for this to be done, the framework would need to register the UserControl's run-time assembly generated by ASP.NET during the initial page load, and then create an instance of the UserControl from that assembly, after which it should be straight-forward to invoke the static AjaxMethod on it.