首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JQuery Ajax在ASP.NET MVC中发送电子邮件后不返回警报

JQuery Ajax在ASP.NET MVC中发送电子邮件后不返回警报
EN

Stack Overflow用户
提问于 2018-04-19 17:39:15
回答 2查看 624关注 0票数 0

如果发不发邮件,我试着显示警报。

使用JQuery Ajax,

这是当我在其中使用项目的id时的联系方法。

并试图使用json发送数据。

代码语言:javascript
复制
[HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Contact(int id, String FromName, String FromEmail, String Message, String subject)
    {
        //To select email of student in current project
        var studentEmail = (from ss in db.Users
                            where ss.projectGroup == id
                            select ss.userEmail).ToArray();
        var isSuccess = false;
        var message = "";
        using (var smtp = new SmtpClient())
        {

            for (int h = 0; h < studentEmail.Length; h++)
            {
                try
                {
                    var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
                    var smtpClient = new SmtpClient();
                    var msg = new MailMessage();

                    msg.To.Add(new MailAddress(studentEmail[h])); //replace with valid value

                    msg.Subject = subject;
                    msg.Body = string.Format(body, FromName, FromEmail, Message);
                    msg.IsBodyHtml = true;

                    smtp.Send(msg);
                    isSuccess = true;
                    message = "The data has been processed!";
                }
                catch (Exception ex)
                {
                    message = "Something failed";
                }
            }
        }
        var jsonData = new { isSuccess, message };

        return Json(jsonData);
       }

在视图中,我使用脚本显示警报和Ajax。

代码语言:javascript
复制
<script type="text/javascript">
function formSuccess(data) {
    if (data.isSuccess) {
        alert("your email has been successfully sent to all students in this project " + data.message);
    } else {
        alert("Sending failed " + data.message);
    }
}

在这里,我发送项目id (pID)并发送电子邮件。

代码语言:javascript
复制
@using (Ajax.BeginForm("Contact", "AreaOfInterest", new { id = pID }, new AjaxOptions { HttpMethod = "POST", OnSuccess = "formSuccess" }))
    {
        @Html.AntiForgeryToken()
        @Html.Raw(TempData["msg"])
        <div class="panel panel-default">
            <div class="panel-heading">
                <h4 class="panel-title">
                    <a class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
                        <strong> Contact with students </strong>
                    </a>
                </h4>
            </div>
            <div id="collapseThree" class="panel-collapse collapse">
                <div class="panel-body">
                    <form>
                        <div class="form-group">
                            <label class="sr-only" for="contact-name">Name</label>
                            <input type="text" name="FromName" placeholder="your name..." class="contact-name form-control" id="contact-name" required>
                        </div>
                        <div class="form-group">
                            <label class="sr-only" for="contact-email">Email</label>
                            <input type="text" name="FromEmail" placeholder="your email..." class="contact-email form-control" id="contact-email" required>
                        </div>
                        <div class="form-group">
                            <label class="sr-only" for="contact-subject">Subject</label>
                            <input type="text" name="subject" placeholder="Subject..." class="contact-subject form-control" id="contact-subject" required>
                        </div>
                        <div class="form-group">
                            <label class="sr-only" for="contact-message">Message</label>
                            <textarea name="Message" placeholder="Message..." class="contact-message form-control" id="contact-message" required></textarea>
                        </div>

                        <input type="submit" class="btn btn-default" value="Send" />

                    </form>


                </div>
            </div>
        </div> <!-- .panel -->
    }

但是在发完邮件后没有显示出警报

它显示当前的状态。

{"isSuccess":true,“message”:“数据已被处理!”}

我的错误在哪里?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-19 17:51:45

您可以在浏览器中看到JSON响应,因为当前的代码正在执行普通形式的post,而不是ajax post。

Ajax.BeginForm助手方法使用一些额外的数据属性呈现一个form标记,如下所示

代码语言:javascript
复制
data-ajax="true" data-ajax-method="POST" data-ajax-success="formSuccess"

如果您是页面的视图源,则可以看到以下内容

现在,要使此表单执行ajax表单提交而不是普通表单提交,您需要在页面中包含jquery.unobtrusive-ajax.js库。这个libarary是一个很小的js库,它将代码连接起来,以便在表单上的submit事件上执行(使用数据- ajax =true属性),防止正常的表单提交行为,而不是执行ajax表单提交。如果不包括此库,则表单将不执行ajax表单提交,而是执行普通表单提交,这就是发生在您身上的情况。

解决方案是包括这个库。

代码语言:javascript
复制
@section Scripts
{
    <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
    <script>
        function formSuccess(data)
        {
            if (data.isSuccess)
            {
                alert("your email has been successfully " + data.message);
            }
            else
            {
                alert("Sending failed " + data.message);
            }
        }
    </script>
}

假设jQuery库已经加载(在布局中,在执行脚本部分的代码之前)。

您可以从nuget下载这个js库。

https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/

票数 1
EN

Stack Overflow用户

发布于 2018-04-19 17:50:00

控制器中的定义方法是:Task<ActionResult>,而返回Json结果。尝试更改为Task<JsonResult>

我在你的代码中没有看到任何Ajax

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49927074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档