2012-10-05 113 views
3

谁能告诉我为什么我会在下面的跟踪中得到错误?SetFocus/Page Cycle - 混淆错误

“SetFocus只能在PreRender之前和期间调用。”

错误消息表示必须在PreRender之前或期间调用“SetFocus”,并基于该跟踪页面与PreRender无关。

那么为什么错误呢?

复制了的trace.axd ...

 
Begin PreInit 
End PreInit 
Begin Init 
End Init 
Begin InitComplete 
End InitComplete 
Begin LoadState 
End LoadState 
Begin ProcessPostData 
End ProcessPostData 
Begin PreLoad 
End PreLoad 
Begin Load 
End Load 
Begin ProcessPostData Second Try 
End ProcessPostData Second Try 
Begin Raise ChangedEvents 
End Raise ChangedEvents 
Begin Raise PostBackEvent 

SetFocus can only be called before and during PreRender. 
  at System.Web.UI.Page.SetFocus(Control control) 
  at System.Web.UI.Control.Focus() 
  at Graylink.Neptune.RecruiterPortal.UserControls.Popups.RecruiterPopups.ShowChangePasswordPopup(RecruiterClass recruiter, String commandName) in C:\Users\jens.uffhaus\SourceControl\Neptune\Source Code\RecruiterPortal\UserControls\Popups\RecruiterPopups.ascx.cs:line 1134 
  at Graylink.Neptune.RecruiterPortal.Default.Password_OnBeforeGo(MenuItem item, String queryString, Boolean forceRedirect) in C:\Users\jens.uffhaus\SourceControl\Neptune\Source Code\RecruiterPortal\Default.Master.cs:line 92 
  at Graylink.Neptune.RecruiterPortal.MenuItem.GoDelegate.Invoke(MenuItem item, String queryString, Boolean forceRedirect) 
  at Graylink.Neptune.RecruiterPortal.MenuItem.Go(String queryString, Boolean forceRedirect) in C:\Users\jens.uffhaus\SourceControl\Neptune\Source Code\RecruiterPortal\Menu\MenuItem.cs:line 129 
  at Graylink.Neptune.RecruiterPortal.MenuItem.Go() in C:\Users\jens.uffhaus\SourceControl\Neptune\Source Code\RecruiterPortal\Menu\MenuItem.cs:line 115 
  at Graylink.Neptune.RecruiterPortal.MainMenu.lnkMyAccountProfilePassword_Click(Object sender, EventArgs e) in C:\Users\jens.uffhaus\SourceControl\Neptune\Source Code\RecruiterPortal\UserControls\MainMenu.ascx.cs:line 130 
  at System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) 
  at System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) 
  at System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) 
  at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) 
  at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) 
  at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
+0

也许它起源于PreRender之后发生的异步方法。 – Jeremy

+0

我在OnPreRender覆盖每个级别的断点,并没有其中之一发生错误之前触发。感谢您的建议。 – Jens

+0

我相信渲染在异步请求期间不会被调用。 – Jeremy

回答

2

正在被调回并导致重定向到另一个页面将导致此错误的页面上调用SetFocus的()。如果!Page.IsPostBack,只尝试调用Focus/SetFocus,你会发现错误不再发生。