0

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

我想知道的是,一旦您单击发送,如何表明某些事情正在实际发生,以免用户不耐烦或误解等。

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

4

4 回答 4

0

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

于 2013-08-21T15:27:20.667 回答
0

开始一个新线程直接发送您的电子邮件,无需等待。

于 2013-08-21T15:30:57.467 回答
0

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

总结一下:

<asp:button runat="server" text="Submit" onclick="code_behind_function" onclientclick="javascriptfunction()"/>
于 2013-08-21T15:59:34.480 回答
-1

使用 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>

发送邮件.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));
        }
    }
}
于 2013-08-21T15:20:22.337 回答