ASP.Net - Esc 键停止我的 'Send Email' 代码

ASP.Net - Esc Key Stops My 'Send Email' Code

我有一个网络表单,其中一页有一个提交按钮。此提交按钮在尝试发送电子邮件时显示处理模式。如果电子邮件发送,页面重定向,如果失败则显示错误消息。所有这一切都很好,但我发现了一个问题,如果用户点击了 'Esc' 键,则不会发送电子邮件并且它不会落入我的 catch。它似乎完全停止了我的电子邮件进程。

我如何确保如果用户单击 Esc 键(或可能的其他键),该过程仍在进行。我知道的第一阶段。

HTML

    <div class="form-group">
        <div class="col-xs-12">
            <div class="pull-right">
                <asp:LinkButton ID="pg3button" runat="server" OnClick="pg3button_Click" CssClass="btn btn-primary" OnClientclick="ShowPopup();"><span aria-hidden="true" class="glyphicon glyphicon-ok"></span> Send & complete</asp:LinkButton>
            </div>
        </div>
    </div>

    <div class="modal fade" id="myModal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="false">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h4 class="modal-title">
                        <asp:Label ID="lblModalTitle" runat="server" Text="">Processing</asp:Label>
                    </h4>
                </div>
                <div class="modal-body">
                    <asp:Label ID="lblModalBody" runat="server" Text="">
                        <p class="text-center">
                            <img src="../Content/Images/loading.gif" />
                        </p>
                    </asp:Label>
                </div>
            </div>
        </div>
    </div>

    <script>
        function ShowPopup()
        {
           $('#myModal').modal();
        }
    </script>

代码隐藏

protected void pg3button_Click(object sender, EventArgs e)
{            
    try
    {
        //Create the msg object to be sent
        MailMessage msg = new MailMessage();

        //Add your email address to the recipients
        msg.To.Add("test@test.co.uk");

        //Configure the address we are sending the mail from
        MailAddress address = new MailAddress("test@test.co.uk");
        msg.From = address;

        //Append their name in the beginning of the subject
        msg.Subject = "Enquiry";

        msg.Body = Label1.Text + " " + Session["pg1input"].ToString()
                    + Environment.NewLine.ToString() +
                    Label2.Text + " " + Session["pg1dd"].ToString()
                    + Environment.NewLine.ToString() +
                    Label3.Text + " " + Session["pg2"].ToString();

        //Configure an SmtpClient to send the mail.
        SmtpClient client = new SmtpClient("smtp.live.com", 587);
        client.EnableSsl = true; //only enable this if your provider requires it

        //Setup credentials to login to our sender email address ("UserName", "Password")
        NetworkCredential credentials = new NetworkCredential("test@test.co.uk", "Password10");
        client.Credentials = credentials;

        //Send the msg
        client.Send(msg);

        Response.Redirect("/Session/pg4.aspx");
    }
    catch
    {
        //If the message failed at some point, let the user know
        lblResult.Text = "<div class=\"form-group\">" + "<div class=\"col-xs-12\">" + "There was a problem sending your request. Please try again." + "</div>" + "</div>" + "<div class=\"form-group\">" + "<div class=\"col-xs-12\">" + "If the error persists, please contact us." + "</div>" + "</div>";
    }
}

使用一些 javascript IMO,页面顶部的类似内容

<script type="text/javascript">
    document.querySelector("input").addEventListener("keyup",function(e){
    switch (e.keyCode) {

    case 116 : // 'F5'
         event.returnValue = false;
         event.keyCode = 0;
         break;  

    case 27: // 'Esc'
        event.returnValue = false;
        event.keyCode = 0;
        break;

    }
}
</script>

这是一个如何检查多个键码的示例。您可以使用相同的逻辑来检查任何类型的按键并按照您认为合适的方式处理它们。

Here 是您需要的键码列表

我发现对我有用的修复方法是将以下内容添加到我的页面顶部:

<script type="text/javascript">
    window.addEventListener('keydown', function (event)
    {
        // if the keyCode is 27 ( Esc )
        if (event.keyCode === 27)
        {
            event.preventDefault();
            return false;
        }

        // if the keyCode is 116 ( F5 )
        if (event.keyCode === 116) {
            event.preventDefault();
            return false;
        }

        // if the keyCode is 8 ( Backspace )
        if (event.keyCode === 8) {
            event.preventDefault();
            return false;
        }
    });
</script>