在發佈信息時保持焦點顯然是一項艱鉅的任務。搜索谷歌,你會發現很多人都渴望同樣的事情,但都以不同的方式掛鉤,而且大多數都是定製的。我想避免一個自定義的實現,特別是如果有一種.NET支持的方式。只有經過一些非常深入的搜索之後,我才遇到PostBackOptions.TrackFocus,在另一個堆棧溢出帖子中悄然提到。根據MSDN:使用PostBackOption維護對發佈信息的控制焦點.TrackFocus
獲取或設置指示回發事件是否應該返回頁面以當前的滾動位置,焦點返回到電流控制值「
哇靠,這是支持的。我們有很多自定義控件,.NET如何知道如何將焦點放在控件上?我不知道。查看System.Web.UI.Control的MSDN文檔,一個有趣的方法:
public virtual void Focus()
「」使用Focus方法將網頁的初始焦點設置爲 控件。該頁面將在瀏覽器選擇的控制 被打開。」
好吧,明確覆蓋的,但這樣做有什麼推薦的方法是什麼?它返回void,沒有例子。無法找到的人的任何實例但是,在覆蓋它並且除了拋出一個異常之外別無它物,這顯然不是ASP.NET如何專注於在回發之前關注的控件:它永遠不會被調用。
經過大量使用Firebug的調試後,我發現啓用PostBackOptions.TrackFocus有效!有時很明顯,控件的焦點只有在控件調用__doPostBack JavaScript方法。其他啓動PostBack的控件(當按下控件內部的按鈕時),調用WebForm_OnSubmit(),它不更新ASP隱藏字段__LASTFOCUS。 __doPostBack在設置隱藏字段後調用WebForm_OnSubmit()。
這是我目前卡住的地方。看起來好像我需要讓所有東西都調用__doPostBack,無論如何。有關使用TrackFocus的文檔非常少。那麼有沒有人有從這裏的任何提示?
我這個問題是我無法控制__LASTFOCUS。我沒有把它放在那裏:我不知道ASP如何使用它,只是因爲我能夠在客戶端編寫腳本,是什麼讓我有權惹上它?如果ASP隨機將它拿走,會發生什麼? (就像它對你)不好。爲什麼不直接添加自己的自定義lastfocus隱藏元素,如果你打算這樣做呢? –
還有一個問題:在回發後向頁面添加控件。將最後一個焦點存儲在隱藏元素中,然後回傳。在控件上動態添加一個控件,該控件具有焦點在頁面上:現在唯一的ClientId已更改,因爲其ID已更改,您的控件將無法保持焦點。 –
@ Sam.Rueby我會認爲,只要控件的ID不會在帖子後面發生變化,這種方法應該仍然有效?特別是如果你去創建一個單獨的__LASTFOCUS隱藏字段。 注意:所有頁面加載中的Page.SetFocus()都將確保__LASTFOCUS存在,在此處詢問並回答:http://stackoverflow.com/questions/6684181/why-does-lastfocus-hidden-field-show-up-on-只有幾家,ASP淨頁 – 2011-07-20 13:10:23