如何向用户指示SmtpClient表单正在执行某些操作(主要是IE)

本文关键字:操作 IE 执行 用户 指示 SmtpClient 表单 | 更新日期: 2023-09-27 18:28:33

我正在使用asp.net和C#的表单发送电子邮件。表单的值是使用它们的id检索的,并使用SmtpClient.send()发送,这一切都很好。

我想知道的是,一旦你点击发送,如何指示实际发生了什么,这样用户就不会不耐烦或误解等等。

该网站将主要通过Microsoft Connect中的页面查看器进行查看,因此他们不会在选项卡上看到加载图标。在Chrome中,指针会变为旋转的圆圈,这很好,但使用IE时根本没有任何指示。我试着用加载gif替换表单所在div的内容,但这只发生在电子邮件发送(或发送失败)之后,而且这种情况一直存在,所以如果他们想发送新的电子邮件,我必须再次替换表单内容,这看起来很麻烦,这就是为什么我要问有什么可能的方法来做到这一点。

如何向用户指示SmtpClient表单正在执行某些操作(主要是IE)

我会在表单提交时打开一个jQueryUI对话框,其中jQueryUI ProgressBar处于不确定状态。一旦浏览器发送请求,它就会出现;然后你的回复可以重定向到一个确认页面,说他们的电子邮件已经发送。或者,如果您正在服务器上执行AJAX请求以启动发送,则可以关闭对话框并在当前页面上显示一条消息。

启动一个新线程直接发送电子邮件,无需等待。

好的,我已经整理好了。基本上,在提交按钮上,我添加了OnClientClick,并通过jQuery将图像标记添加到表单中。因为每次单击按钮都会创建表单(因为内容取决于单击哪个按钮),所以在发送电子邮件后,图像就不存在了。当在电子邮件发送后持久存在的代码后面添加图像标记时,情况并非如此。

综上所述:

<asp:button runat="server" text="Submit" onclick="code_behind_function" onclientclick="javascriptfunction()"/>

使用SMTPClient.SendAsync在后台发送邮件。创建一个事件处理程序来捕获发送邮件的回调何时完成,然后隐藏微调器。

例如

// Code to show your spinning circle goes here
client.SendCompleted += new 
        SendCompletedEventHandler(SendCompletedCallback);
...

private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
    {
        // Code to hide your spinning circle goes here!
    }

下面是一个使用javascript显示图像,然后将其隐藏在后面的代码中的工作示例。不需要发送异步。(错误处理已提交)

sendmail.aspx页面:

<body>
    <form id="form1" runat="server">
        <div>
            From: <asp:TextBox ID="txtFrom" runat="server"></asp:TextBox><br />
            To: <asp:TextBox ID="txtTo" runat="server"></asp:TextBox>
        </div>
        <div id="spinner_div">
            <asp:Image ID="imgSpinner" runat="server" ImageUrl="~/Images/ajax-loader.gif"></asp:Image>
        </div>
        <input type="button" onclick="document.getElementById('imgSpinner').style.display = ''; document.forms[0].submit();" value="Send Mail" />
    </form>
</body>

sendmail.aspx。cs

public partial class Sendmail : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        imgSpinner.Attributes.Add("style", "display:none");
        if (IsPostBack)
        {
            System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
            client.Send(new System.Net.Mail.MailMessage(txtFrom.Text, txtTo.Text));
        }
    }
}