这是我的第一个Ajax调用,我真的很困惑该怎么做。
我正在使用ASP.NET MVC,Identity在我的网站上注册用户。用户注册后,我会向他发送电子邮件以确认他们的电子邮件地址。
这是我的注册操作方法:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email.Trim(), Email = model.Email.Trim(), FirstName = model.FirstName.Trim(), LastName = model.LastName.Trim() };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
// Send an email with this link
string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
Email email = _emailBuilder.BuildConfirmationEmail(new MailAddress(model.Email.Trim(), model.FirstName.Trim() + " " + model.LastName.Trim()), callbackUrl, model.FirstName.Trim());
Session[SessionKeys.NewAccountConfirmationEmail.ToString()] = email;
await _emailService.SendEmailAsync(email);
return RedirectToAction("NewAccountCheckYourEmail");
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(model);
}
注册方法发送确认电子邮件并重定向到NewAccountCheckYourEmail View,用户可以看到此页面:
以下是重定向用户以确认您的电子邮件页面的操作方法
[AllowAnonymous]
public ViewResult NewAccountCheckYourEmail()
{
return View();
}
我想要做的是将电子邮件存储在用户会话中,因此如果用户点击重发电子邮件,我会重新发送电子邮件。
我想进行ajax调用,因此当用户点击重新发送链接时,它会回发到控制器,从用户会话中获取电子邮件,重新发送并重新显示相同的视图。
我不知道该怎么做
我厌倦了这个AJAX电话:
$("#ResendEmailLink").click(function () {
$.ajax({
url: "/Account/NewAccountCheckYouEmail",
datatype: "text",
type: "POST",
success: function (data) {
$('#testarea').html("All OK");
},
error: function () {
$("#testarea").html("ERROR");
}
});
});
我想让它点击这个动作方法:
[HttpPost]
[AllowAnonymous]
public async Task<ActionResult> NewAccountCheckYourEmail()
{
Email email = Session[SessionKeys.NewAccountConfirmationEmail.ToString()] as Email;
await _emailService.SendEmailAsync(email);
return View();
}
但是因为我已经有了另一个同名的Action方法,所以我无法添加它...我想我想要做的事情没有多大意义,有任何关于合理方法的建议吗?
答案 0 :(得分:3)
由于@Stephen Muecke指出要返回Json
数据,所以这个基本的改变应该有效。
重新发送电子邮件脚本:
$("#ResendEmailLink").click(function () {
$.ajax({
url: "/Account/ResendEmailToUser",
datatype:'json',
type: "POST",
success: function (data) {
if(data) { $('#testarea').html(data.Message) };
},
error: function () {
$("#testarea").html("ERROR");
}
});
});
重新发送电子邮件操作方法:
[HttpPost]
[AllowAnonymous]
public async Task<ActionResult> ResendEmailToUser()
{
Email email = Session[SessionKeys.NewAccountConfirmationEmail.ToString()] as Email;
await _emailService.SendEmailAsync(email);
var jsonData = new { Message = "Done!, We have Resend the Email" };
return Json(jsonData);
}