【发布时间】:2011-07-01 14:34:08
【问题描述】:
在后背上保持专注显然是一项艰巨的任务。搜索谷歌,你会发现很多人都渴望同样的东西,但都以不同的方式联系起来,而且大多是习惯性的。我想避免自定义实现,特别是如果.NET 支持它的方式。只有经过一些非常深入的搜索,我才遇到 PostBackOptions.TrackFocus,在另一个堆栈溢出帖子中悄悄提到。根据 MSDN:
获取或设置一个值,该值指示回发事件是否应将页面返回到当前滚动位置并将焦点返回到当前控件。"
天哪,.NET 4 支持吗?惊人的。但是我们有大量的自定义控件,.NET 怎么知道如何将焦点设置在控件上?我不知道。查看 System.Web.UI.Control 的 MSDN 文档,有一个有趣的方法:
public virtual void Focus()
"使用 Focus 方法将网页的初始焦点设置为 控制。该页面将在带有控件的浏览器中打开 被选中。”
好的,显然可以覆盖。但是这样做的推荐方法是什么?它返回无效。没有例子。找不到任何人在其实现中覆盖此方法的示例。但是,在覆盖它并且除了抛出异常之外什么都不做之后,很明显这不是 ASP.NET 获得焦点的方式,该控件在回发之前具有焦点:它永远不会被调用。
在使用 Firebug 进行大量调试后,我发现启用 PostBackOptions.TrackFocus 有效!有时。很明显,控件的焦点只有在控件调用 __doPostBack JavaScript 方法时才会保持。启动 PostBack 的其他控件(当在控件内按 enter 时)调用 WebForm_OnSubmit(),它不会更新 ASP 隐藏字段 __LASTFOCUS。 __doPostBack 在设置隐藏字段后调用 WebForm_OnSubmit()。
这是我目前卡住的地方。无论如何,我似乎都需要调用 __doPostBack。关于使用 TrackFocus 的文档非常非常少。那么这里有人有什么建议吗?
【问题讨论】:
标签: c# asp.net focus postback dopostback