首页 > 解决方案 > 当 MaintainScrollPositionOnPostback 设置为 true 时,回发会导致页面“闪烁”

问题描述

我在网上做了很多研究,并认为这将是一个相当简单的修复,但要么我没有正确搜索,要么我错过了答案:我有一个 aspx 页面和里面的一个小 C#那。我在开关上有一个checkedchanged 事件来隐藏/显示一个文本框。当事件触发时,回发会导致页面转到顶部。我尝试将 MaintainScrollPositionOnPostback 设置为 true,虽然这确实保持了滚动位置,但回发会导致页面“闪烁”并且非常不愉快。我怎样才能隐藏这个过渡,或者最好是消除它。感谢您的考虑。

正如@dave_holden 所建议的那样,我把它放在了一个 UpdatePanel 中,这样就可以了。 (至少在我记得为什么我一开始不使用它之前。:)

<%@ Page Language="C#" AutoEventWireup="true" Inherits="blah" MaintainScrollPositionOnPostback="true" %>

<%@ Import Namespace="System.Windows" %>

<!DOCTYPE html>

<script runat="server">

protected void cbSignator_CheckedChanged(object sender, EventArgs e)
{
    if (cbSignator.Checked)
    {
        tbSignator.Visible = true;
        lblSignator.Visible = true;
    }
    else
    {
        tbSignator.Visible = false;
        lblSignator.Visible = false;
        tbSignator.Text = "";
    }
}

</script>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">
<meta charset="UTF-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<meta name="author" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<title>Request Form</title>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />

</head>

<body>

    <form id="Contract" runat="server">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 

    <section id="CustomerInfo">
        <div class="row" id="customerFields2">
            <div class="column">
                <label class="switch">
                    <span class="slider"></span>
                </label>
                <asp:Label ID="lblSignatory" runat="server" CssClass="labels" Text="Will be signatory?" />
            </div>
            <div class="column">
                <asp:Label ID="lblSignator" runat="server" CssClass="labels" Visible="false" Text="Signator:" />
                <asp:TextBox ID="tbSignator" runat="server" class="textboxes" Visible="false" />
            </div>
        </div>
    </section>
    </ContentTemplate>
    </UpdatePanel>
    </form>
</body>

标签: c#asp.net

解决方案


正如@dave_holden 所建议的那样,我把它放在了一个 UpdatePanel 中,这样就可以了。(至少在我记得为什么我一开始不使用它之前。:)


推荐阅读