2009-12-16 47 views
2

我有模块,使一个Response.Redirect不同的页面,如果一些条件不满足。但是,我注意到EventLog中有很多与此有关的错误。我正确的说,由于DNN所使用的页面上的模块的动态加载,I 不能在 不应该在Init方法中做一个重定向吗?DotNetNuke重定向在Page_Init方法异常

这里是例外:

System.Threading.ThreadAbortException:线程已被中止。 System.Web.HttpResponse.End()处的System.Threading.Thread.Abort(Object stateInfo)处的System.Web.HttpResponse.Redirect(String url,Boolean endResponse)处的System.Threading.Thread.AbortInternal()。 C:\ Projects \ ASP_NET \ XXXX \ XXXX.Controllers \ BaseNavigationController.cs中的Controllers.BaseNavigationController.NavigateTo(String url,NameValueCollection qsParams,Boolean endResponse):XXXX.Controllers.BaseNavigationController.NavigateTo(String url) \ Projects \ ASP_NET \ XXXX \ XXXX.Controllers \ BaseNavigationController.cs:第45行XXXX.UI.DesktopModules.QuoteStepModuleBase.CheckIfOnValidStep()在C:\ Projects \ ASP_NET \ XXXX \ WebRoot \ XXXX.UI \ BaseClasses \ QuoteStepModuleBase.cs :C:\ Projects \ ASP_NET \ XXXX \ WebRoot \ XXXX.UI \ BaseClasses \ QuoteStepModuleBase.cs中XXXX.UI.DesktopModules.QuoteStepModuleBase.QuoteStepModuleBase_Init(对象发件人,EventArgs e)行64:System.Web.UI行31 .Control.OnInit(EventArgs e)在System.Web.UI.UserControl.OnInit(EventArgs e)在System.Web.UI.Cont在System.Web.UI.Control.AddedControl(Control控件,Int32索引)上的Rol.InitRecursive(Control namingContainer)在System.Web.UI.ControlCollection.Add(控制子)DotNetNuke.UI.Modules.ModuleHost.InjectModuleContent(Control内容)在C:\ Projects \ 3rdParty \ DotNetNuke_Community_05.01.01_Source \ Library \ UI \ Modules \ ModuleHost.vb:C:\ Projects \ 3rdParty \ DotNetNuke_Community_05.01.01中DotNetNuke.UI.Modules.ModuleHost.CreateChildControls()178行_Source \ Library \ UI \ Modules \ ModuleHost.vb:第428行System.Web.UI.Control.EnsureChildControls()在DotNetNuke.UI.Modules.ModuleHost.get_ModuleControl()在C:\ Projects \ 3rdParty \ DotNetNuke_Community_05.01.01_Source \ Library \ UI \ Modules \ ModuleHost.vb:C:\ Projects \ 3rdParty \ DotNetNuke_Community_05.01.01_Source \ Library \ UI \ Containers \ Container.vb中的DotNetNuke.UI.Containers.Container.get_ModuleControl()中的第95行:第123行在C:\ Projects \ 3rdParty \ DotNetNuke_Community_05.01.01_Source \ Library \ UI \ Cont DotNetNuke.UI.Containers.Container.ProcessModule()中ainers \ Container.vb:C:\ Projects \ 3rdParty \ DotNetNuke_Community_05.01.01_Source \ Library \ UI \ Containers \ Container.vb中的DotNetNuke.UI.Containers.Container.SetModuleConfiguration(ModuleInfo配置)中的第364行:DotNetNuke的第548行。 UI.Skins.Pane.InjectModule(ModuleInfo objModule)在C:\项目\的3rdParty \ DotNetNuke_Community_05.01.01_Source \库\ UI \皮肤\ Pane.vb:线402

回答

3

Response.Redirect抛出一个ThreadAbortException停止执行的页面。这不是问题,可以安全地忽略。您可以查看您正在记录异常的位置,并分别记录ThreadAbortException,以避免记录。

您也可以通过false作为第二个参数来Response.Redirect,这将结束的响应,而不是抛出异常,在渲染服务器上的网页的费用时,它不会被渲染到客户。

+0

谢谢,我意识到Response.Redirect引发异常的事实。我对DNN如何动态加载模块以及它如何适应这种情况更感兴趣。例如,DNN中的常见做法是不在init事件中重定向? – cfbarbero 2009-12-16 21:21:36

+1

我从来没有听说过DNN的任何指导,以避免在Init事件中重定向。我不相信DNN的动态加载模块对重定向有任何影响。 – bdukes 2009-12-16 21:40:45

+1

我们在各种地方重定向,并且我们在response.redirect中使用了FALSE作为第二个参数 - 我们想知道同样的事情,但是找不到任何说不这样做的事情,或者这是一种不好的做法。我的2便士! – braindice 2009-12-16 21:45:17