C# ASP.NET服务器。执行

C# ASP.NET服务器。执行,c#,asp.net,C#,Asp.net,我在服务器上遇到一些问题。执行该命令时,我似乎找不到任何详细信息 Page page = new WidgetProcessor(Widget); Server.Execute(page, htmlTextWriter, true); 上面代码中的小部件是一个简单的对象,它知道如何实例化usercontrol。WidgetProcessor获取一个小部件并将小部件控件添加到页面中。这在初始加载时效果很好,但似乎无法处理回发;它实际上从不触发用户控件事件,它只是始终如一地返回原始页面,就好像您从

我在服务器上遇到一些问题。执行该命令时,我似乎找不到任何详细信息

Page page = new WidgetProcessor(Widget);
Server.Execute(page, htmlTextWriter, true);
上面代码中的小部件是一个简单的对象,它知道如何实例化usercontrol。WidgetProcessor获取一个小部件并将小部件控件添加到页面中。这在初始加载时效果很好,但似乎无法处理回发;它实际上从不触发用户控件事件,它只是始终如一地返回原始页面,就好像您从未发回过一样

我发现了,不过我想他们现在已经解决了这个问题


任何帮助都将不胜感激。

我猜,由于您正在向页面动态添加控件,它们没有在正确的时间注册到viewstate,因此会丢失。使用动态控件时,您必须重新添加具有相同id的控件,以便拾取它们,从而可以注册回发。

您需要在运行页面加载之前加载控件。OnInit通常是它完成的地方。这意味着该控件将在ASP.NET打开ViewState跟踪更改之前注册。更改跟踪处于启用状态(就在触发页面加载之前),该控件对ViewState的所有更改都将被视为脏更改,因此初始值和更改的值之间没有差异。此外,如果在打开更改跟踪后加载控件,ViewState引擎将无法判断回发时的值是否已更改,因为它没有原始值可供比较。

使用Server.Execute时,URL作为参数传递给它,控件将移到此新页面。代码在新页面上执行。一旦代码执行结束,控件将返回初始页面,就在调用它的位置之后。但是,在Server.Transfer的情况下,它的工作原理基本相同,不同之处在于执行会在新页面本身停止(意味着控件不会返回到调用页面)。
在这两种情况下,浏览器中的URL仍然是第一个页面URL(不会刷新到新页面URL),因为浏览器没有被要求这样做。

这不是问题,只要我直接访问它,而不是使用Server.Execute,页面事件就可以很好地工作。这不是问题,只要我直接访问页面,而不是使用Server.Execute,页面事件就可以正常工作。