3

谁能告诉我为什么我会在下面的跟踪中得到错误?

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

错误消息指出,必须在 PreRender 之前或期间调用“SetFocus”,并且根据跟踪,页面与 PreRender 还没有任何关系。

那么为什么会出错呢?

复制自 Trace.axd ...

开始预初始化
结束预初始化
开始初始化
结束初始化
开始初始化完成
结束初始化完成
开始加载状态
结束加载状态
开始处理PostData
结束进程PostData
开始预加载
结束预加载
开始加载
最终负载
开始 ProcessPostData 第二次尝试
结束 ProcessPostData 第二次尝试
开始引发 ChangedEvents
End Raise ChangedEvents
开始提高 PostBackEvent

SetFocus 只能在 PreRender 之前和期间调用。
  在 System.Web.UI.Page.SetFocus(控制控件)
  在 System.Web.UI.Control.Focus()
  在 C:\...\RecruiterPopups.ascx.cs:line 1134 中的 ....ShowChangePasswordPopup(RecruiterClass 招聘人员,字符串 commandName)
  在 ....Default.Password_OnBeforeGo(MenuItem item, String queryString, Boolean forceRedirect) in C:\...\Default.Master.cs:line 92
  在 ....MenuItem.GoDelegate.Invoke(MenuItem 项,字符串 queryString,布尔力重定向)
  在 ....MenuItem.Go(String queryString, Boolean forceRedirect) 在 C:\...\Menu\MenuItem.cs:line 129
  在 ....MenuItem.Go() 在 C:\...\Menu\MenuItem.cs:line 115
  在 ....MainMenu.lnkMyAccountProfilePassword_Click(Object sender, EventArgs e) 在 C:\...\UserControls\MainMenu.ascx.cs:line 130
  在 System.Web.UI.WebControls.LinkBut​​ton.OnClick(EventArgs e)
  在 System.Web.UI.WebControls.LinkBut​​ton.RaisePostBackEvent(字符串 eventArgument)
  在 System.Web.UI.WebControls.LinkBut​​ton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument)
  在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,字符串 eventArgument)
  在 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
  在 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)
4

2 回答 2

2

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

于 2013-12-03T18:40:33.770 回答
0

晚了几年,但无论谁遇到这个......

txt.Focus()我们在处理程序中调用了btn.OnClick。它工作了很多年。最近我们将处理程序转换为async并添加了对 API 的调用。

该更改导致.Focus()调用引发此异常:

SetFocus can only be called before and during PreRender.

解决方案非常简单:

  1. 为按钮的PreRender事件添加一个新的处理程序。
  2. txt.Focus()从此处理程序调用。

它可能不是适用于所有场景的可行解决方案,但它适合我们。

于 2022-02-03T02:47:22.407 回答