我在我的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中的exessMessage是什么).
“public ActionResult SendMessage(string message){}”的实现是无关紧要的.
我需要知道如何仅在showError(错误)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方法中的每个异常.因为如果响应状态不在200范围内,则调用
OnFailure .所以你可以处理你的场景:
- [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);
- }
希望这将有助于您.