我的页面上有一个UpdatePanel ...
HTML表单:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" ClientIDMode="Static" EnablePageMethods="True"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="main">
<div class="mainTop" id="pinboxContainer">
<asp:TextBox ID="pinbox" runat="server" Placeholder="Enter your PIN"></asp:TextBox>
</div>
<div class="mainMid" id="nameContainer">
<div id="nameBox">
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataSourceID="SqlDS">
<Fields>
<asp:BoundField DataField="FirstLast" HeaderText="FirstLast" ShowHeader="False" SortExpression="FirstLast" />
</Fields>
</asp:DetailsView>
</div>
</div>
<div class="photoContainer">
<div class="photo">
<asp:GridView ID="GridPHOTO" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDS" OnRowDataBound="OnRowDataBound" BorderStyle="None" ShowHeader="False" GridLines="None" BorderColor="#66FF33" BorderWidth="1px">
<Columns>
<asp:TemplateField HeaderText="Photo" ShowHeader="False" ControlStyle-BorderStyle="None">
<ItemTemplate>
<asp:Image ID="Image1" runat="server" BorderStyle="Solid" />
</ItemTemplate>
<ControlStyle BorderStyle="None" />
</asp:TemplateField>
</Columns>
<EditRowStyle BorderStyle="None" />
</asp:GridView>
</div>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<asp:SqlDataSource ID="SqlDS" runat="server" ConnectionString="<%$ ConnectionStrings:ValidateConnectionString %>" SelectCommand="SELECT [StuId], [FirstName], [LastName], [Alert], [Photo], [FirstLast] FROM [foodservice_SS18] WHERE ([PIN] = @PIN)">
<SelectParameters>
<asp:ControlParameter ControlID="pinbox" Name="PIN" PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<script src="JS/JavaScript.js"></script>
</form>
我有一个小jQuery,它着重于页面加载时的密码盒以及通过UpdatePanel进行的部分页面更新...
JS
function setFocus() {
alert('whole page refresh');
setTimeout(function () {
$('#pinbox').focus();
}, 1000);
};
$(document).ready(setFocus);
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function () {
alert('partial page refresh');
$('#pinbox').focus();
});
DetailsView
和GridView
都从SELECT parameter
中提取pinbox
。在pinbox
中输入PIN并且用户按Enter键后,DetailsView
和GridView
会为该用户返回一些数据。
这一切正常,但是问题在于UpdatePanel的行为:
页面加载>焦点设置在pinbox
上>在密码框中输入PIN码>按Enter =刷新整个页面
页面将继续刷新整页,直到您执行此操作...
页面加载>焦点设置在pinbox
上> 在密码箱之外的某个地方单击>在密码箱中单击返回>输入PIN码>按Enter =刷新部分页面
我不明白为什么页面会做整页刷新,直到从密码箱中单击出来,然后再将其单击回来。
如果我删除了jQuery并且未将焦点放在(document).ready上,那么我必须单击进入pinbox
,它会刷新部分页面。
任何建议,不胜感激!