Форма отправляется на обновление браузера - PullRequest
1 голос
/ 25 марта 2012

У меня проблемы с поиском решения, чтобы остановить отправку формы при нажатии кнопки обновления браузера.

Это форма авторизации, которую я имею:

<asp:Login ID="EMSLogin" runat="server" OnAuthenticate="EMSLogin_Authenticate">
    <LayoutTemplate>
        <asp:Panel ID="Panel1" runat="server" CssClass="wrapper">
            <asp:Panel ID="Panel2" runat="server" CssClass="holder">
                <asp:Panel ID="Panel3" runat="server" CssClass="loginBox one_edge_shadow">
                    <h1>
                        Login Credentials</h1>
                    <asp:Panel ID="Panel4" runat="server" CssClass="name topmargin">
                        <asp:Panel ID="Panel5" runat="server" CssClass="label">
                            <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">User Name:</asp:Label>
                        </asp:Panel>
                        <asp:Panel ID="Panel6" runat="server" CssClass="textBox">
                            <telerik:RadTextBox ID="UserName" runat="server" Height="16px" Width="165px" Font-Size="14px"
                                Font-Names="Arial Sans-Serif" ToolTip="Enter your valid login name" />
                            <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
                                ValidationGroup="EMSLogin">*</asp:RequiredFieldValidator>
                        </asp:Panel>
                        <br class="clearfix" />
                    </asp:Panel>
                    <asp:Panel ID="Panel7" runat="server" CssClass="name topmargin">
                        <asp:Panel ID="Panel8" runat="server" CssClass="label">
                            <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
                        </asp:Panel>
                        <asp:Panel ID="Panel9" runat="server" CssClass="textBox">
                            <telerik:RadTextBox ID="Password" runat="server" TextMode="Password" Height="16px"
                                Width="165px" Font-Size="14px" Font-Names="Arial Sans-Serif" ToolTip="Enter your valid password" />
                            <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
                                ValidationGroup="EMSLogin">*</asp:RequiredFieldValidator>
                        </asp:Panel>
                        <br class="clearfix" />
                        <telerik:RadButton ID="LoginButton" runat="server" CommandName="Login" Text="Log In"
                            CssClass="loginButton" Font-Size="14px" Width="100px" ValidationGroup="EMSLogin"
                            ToolTip="Click to log in" />
                    </asp:Panel>
                </asp:Panel>
            </asp:Panel>
        </asp:Panel>
    </LayoutTemplate>
</asp:Login>

А в бэкэнде:

protected void Page_Load(object sender, EventArgs eventArgs) {
    log.Info("=============INSIDE Page_Load======");
    DataBind();
    LoginErrorWindow.VisibleOnPageLoad = false;     
}

protected void EMSLogin_Authenticate(object sender, AuthenticateEventArgs e) {
    log.Info("=============INSIDE EMSLogin_Authenticate======");
    RadTextBox UserName = EMSLogin.FindControl("UserName") as RadTextBox;
    RadTextBox Password = EMSLogin.FindControl("Password") as RadTextBox;

    if (Membership.ValidateUser(UserName.Text, Password.Text)) {
    FormsAuthentication.RedirectFromLoginPage(UserName.Text, false);
    } else {
    LoginErrorWindow.NavigateUrl = EMSApplication.Web.Utils.NavigationUtils.GetLoginErrorDialogURL();
    LoginErrorWindow.VisibleOnPageLoad = true;
    }
}

Теперь после неудачного входа в систему, если я нажимаю кнопку обновления, метод EMSLogin_Authenticate снова выполняется. И перед перезагрузкой показывает:

enter image description here

Как я могу решить это?

1 Ответ

3 голосов
/ 25 марта 2012

Сделайте Response.Redirect на странице ошибки после неудачной попытки входа в систему.

См. Шаблон PRG в Википедии.

Post / Redirect / Get (PRG) - это шаблон дизайна веб-разработки, который предотвращает дублирование некоторых форм, создавая более интуитивный интерфейс для пользовательских агентов (пользователей). PRG реализует закладки и кнопку обновления предсказуемым образом, что не приводит к дублированию представлений форм.

...