如果发不发邮件,我试着显示警报。
使用JQuery Ajax,
这是当我在其中使用项目的id时的联系方法。
并试图使用json发送数据。
[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。
<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)并发送电子邮件。
@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”:“数据已被处理!”}
我的错误在哪里?
发布于 2018-04-19 17:51:45
您可以在浏览器中看到JSON响应,因为当前的代码正在执行普通形式的post,而不是ajax post。
Ajax.BeginForm助手方法使用一些额外的数据属性呈现一个form标记,如下所示
data-ajax="true" data-ajax-method="POST" data-ajax-success="formSuccess"如果您是页面的视图源,则可以看到以下内容
现在,要使此表单执行ajax表单提交而不是普通表单提交,您需要在页面中包含jquery.unobtrusive-ajax.js库。这个libarary是一个很小的js库,它将代码连接起来,以便在表单上的submit事件上执行(使用数据- ajax =true属性),防止正常的表单提交行为,而不是执行ajax表单提交。如果不包括此库,则表单将不执行ajax表单提交,而是执行普通表单提交,这就是发生在您身上的情况。
解决方案是包括这个库。
@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/
发布于 2018-04-19 17:50:00
控制器中的定义方法是:Task<ActionResult>,而返回Json结果。尝试更改为Task<JsonResult>。
我在你的代码中没有看到任何Ajax
https://stackoverflow.com/questions/49927074
复制相似问题