使用PostBackOptions.TrackFocus在后台文件中保持控制焦点在后台文件中保持焦点显然是一项艰巨的任务。搜索谷歌,你会发现很多人渴望同样的东西,但都有不同的联系,而且大多是定制的。我想避免自定义实现,特别是如果它支持.NET方式。经过一番真正深入的搜索后,我发现了PostBackOptions.TrackFocus,它在另一篇StackOverflow帖子中悄悄提到过。根据MSDN:获取或设置一个值,该值指示回发事件是否应将页面返回到当前滚动位置并将焦点返回到当前控件。“天哪,.NET4支持吗?太棒了。但是我们有大量的自定义控件,.NET如何知道如何在控件上设置焦点?我不知道。查看System.Web.UI。Control的MSDN文档中,有一个有趣的方法:publicvirtualvoidFocus()》使用Focus方法将网页的初始焦点设置到控件上。该页面将在浏览器中打开,并选中该控件。“嗯,显然可以覆盖。但是推荐的方法是什么?它返回void。没有示例。找不到任何人在实现中覆盖此方法的示例。但是,在覆盖它之后除了抛出什么都不做一个异常在外面什么都不做之后,很明显这不是ASP.NET如何在回发之前关注有焦点的控件:它永远不会被调用。在用Firebug大量调试后,我发现启用PostBackOptions.TrackFocus是有效的!有时。显然,控件的焦点仅在控件调用__doPostBackJavaScript方法时保持。其他启动PostBack的控件(当在控件内按下Enter时)调用WebForm_OnSubmit(),它不会更新ASP隐藏字段__LASTFOCUS.__doPostBack在设置隐藏字段后调用WebForm_OnSubmit()。这是我目前卡住的地方。看起来我需要调用所有__doPostBack,无论如何。关于TrackFocus使用文档的内容非常非常少。所以有人从这里得到任何提示吗?我一直在使用本文中的方法来关注回发:(即:将焦点存储在__LASTFOCUS隐藏字段中,所有控件的输入事件客户端)http://www.codeproject.com/KB/aspnet/MainatinFocusASPNET.aspx如果您已经在页面上显示了__LASTFOCUS,那么这应该为您完成剩下的大部分工作......注意:最好找到一种方法来防止额外的javascript膨胀__VIEWSTATE。它对我来说工作得很好,直到我发现我的一些页面包含隐藏的__LASTFOCUS字段而我的一些页面没有。(这就是促使我四处搜索并找到你的问题的原因)现在我只是想弄清楚如何确保__LASTFOCUS始终显示在我想要跟踪焦点的每个页面上......(看起来我必须打开一个单独的问题)这就是我刚刚所做的。假设您的代码背后有一个处理程序来处理事件,其签名如下:protectedvoidmyEventHandler(objectsender,EventArgse)WebControl)sender,sender.GetType(),"RestoreFocusMethod","document.getElementById(""+((WebControl)sender).ClientID+"").focus();",true);只需使用发送控件的Focus()方法即可重新定位页面(如果您向下滚动一点),但这工作正常。如果您有控件的特定处理程序,则可以使用控件本身而不是将发送者强制转换为WebControl,如下所示:以上是关于C#学习教程:使用PostBackOptions的全部内容。内容,如果对你有用,需要了解更多C#学习教程,希望你多多关注—),"CityDropDownRefocus","document.getElementById(""+CityListDropDown.ClientID+"").focus();",true);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
