2015-11-17 50 views
0

我有一個加載數據網格的頁面。第一列有鏈接按鈕和一個編輯命令,該命令調用一個模式彈出窗口,焦點位於第一個字段上,該字段既可以是文本框,也可以是下拉列表。設置焦點並保持滾動位置ASP.NET AJAXControlToolkit

現在我的問題是,當我向下滾動數據網格並選擇編輯時,頁面向上滾動,在彈出模式之前按下我選擇編輯的數據網格中的行。保持滾動位置的唯一方法是從我的模式彈出窗口中刪除焦點。

有什麼辦法可以設置焦點並保持滾動位置?

我使用ASP.NET版本4.5.51650,AJAXControlToolkit版本15.1.2,VB.NET

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
    <asp:DataGrid ID="DataGrid" runat="server"> 
     <Columns> 
     <asp:TemplateColumn HeaderText="Name"> 
      <ItemTemplate> 
      <asp:LinkButton ID="lb_Name" CommandName="Edit" runat=server /> 
      </ItemTemplate> 
     </asp:TemplateColumn> 
     </Columns> 
    </asp:DataGrid> 
    </ContentTemplate> 
</asp:UpdatePanel> 

<asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
    <asp:Button ID="Button1" style="display:none" runat="server" /> 
    <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender" TargetControlID="Button1" PopupControlID="ModalPopupExtender_Panel" runat="server" /> 
     <asp:Panel ID="ModalPopupExtender_Panel" style="display:none" DefaultButton="ModalPopupExtender_Ok" runat="server"> 
     <asp:Table runat="server"> 
      <asp:TableRow> 
      <asp:TableCell> 
       <asp:Textbox ID="Textbox1" runat="server" /> 
      </asp:TableCell> 
      </asp:TableRow> 
     </asp:Table> 
     <div> 
      <asp:Button ID="ModalPopupExtender_Ok" Text="Save" runat="server" /> 
      <asp:Button ID="ModalPopupExtender_Cancel" Text="Cancel" runat="server" /> 
     </div> 
     </asp:Panel> 
    </ContentTemplate> 
</asp:UpdatePanel> 

代碼背後:

Private Sub BindDataGrid() 
    'code goes here 
    UpdatePanel1.Update() 
End Sub 

Private Sub DataGrid_EditCommand(ByVal source As Object, ByVal e As DataGridCommandEventArgs) Handles DataGrid.EditCommand 
    'code goes here 
    UpdatePanel2.Update() 
    Textbox1.Focus() 
    ModalPopupExtender.Show() 
+0

我正在嘗試重構您的示例。誰調用'BindDataGrid()'方法? –

+0

對於這個例子,BindDataGrid()在頁面加載時被調用,然後在信息從模式中被保存後再被調用。我試圖簡化/概括我的代碼,以便在其他人遇到類似問題時可能會更有幫助。 – giselleghadyani

+0

好的,所以我需要把它放到Page_Load方法中,對吧? –

回答

1

SetFocus的使用JavaScript函數 「scrollIntoView」 滾動到焦點字段,您可以使用以下代碼覆蓋它,只有當字段不在可見區域時,纔會滾動頁面,

$(document).ready(function() { 
HTMLInputElement.prototype.scrollIntoView = function(a) { 
    this.scrollIntoViewIfNeeded(); 
} 
HTMLSelectElement.prototype.scrollIntoView = function(a) { 
    this.scrollIntoViewIfNeeded(); 
} 
HTMLAreaElement.prototype.scrollIntoView = function(a) { 
    this.scrollIntoViewIfNeeded(); 
} });