我的 MVC3 应用程序中有这个简单的 ajax 表单,用于发送电子邮件:
@using (Ajax.BeginForm("SendMessage", new AjaxOptions {
LoadingElementId = "wait",
OnSuccess = "loadMessages",
OnFailure = "showError" }))
{
<input type="text" name="message" placeholder="Message" />
<input type="submit" name="submit" value="Send" />
}
如果操作无法发送消息,则会抛出异常。异常在 showError(error){} javascript 函数中进行处理和显示:
function showError(error) {
$("#error").text(error.responseText);
};
问题是:error.responseText是整个错误页面的html转储。
我只需要显示异常错误消息(MVC3 中的 ex.Message 中的内容)。
“public ActionResult SendMessage(string message) { }”的实现是无关紧要的。
我需要知道如何仅在 showError(error) javascript 处理程序中显示异常消息。
非常感谢。
[HttpPost]
public ActionResult SendMessage(string message)
{
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("sender@gmail.com");
mail.Subject = "Some Message";
mail.Body = message;
mail.To.Add("recepient@gmail.com");
SmtpServer.Send(mail);
return null;
}
最佳答案
您无法处理 OnFailure 方法中的每个异常。因为OnFailure 如果响应状态不在 200 范围内,则调用。所以你可以像这样处理你的场景:
[HttpPost]
public ActionResult SendMessage(string message)
{
MailMessage mail = new MailMessage();
ActionResult response = null;
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("sender@gmail.com");
mail.Subject = "Some Message";
mail.Body = message;
mail.To.Add("recepient@gmail.com");
try
{
SmtpServer.Send(mail);
response = Content("Success");
}
catch (Exception ex)
{
response = Content(ex.Message);
}
return response;
}
在此代码中,如果邮件发送成功,则我已返回响应“成功”,否则我已返回实际错误,并且在 javascript 中我已像这样处理此响应:
function loadMessages(error) {
if (error == 'Success') {
alert("Mail Sent successfully");
}
else {
$("#error").text(error);
}
希望这对您有帮助。
关于jquery - 如何在MVC3中的Ajax.BeginForm的OnFailure中仅显示错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085303/