jquery - 如何在MVC3中的Ajax.BeginForm的OnFailure中仅显示错误消息?

标签 jquery asp.net-mvc-3 ajax.beginform

我的 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/

相关文章:

jquery - 调整 Silverlight 容器 div 的大小会使 Silverlight 在 Firefox 中重新加载

使用flipCounter setInterval/onAnimationStopped 的 jQuery Ajax 计时循环问题

asp.net - 如何防止 Ajax.BeginForm 加载新页面?

asp.net-mvc-3 - MVC3 - Razor,Ajax.BeginForm - 客户端 - OnBegin

jquery - 如何显示一个元素,做其他事情,然后在一次点击事件中隐藏该元素?

c# - 使用 fluentvalidation 和 asp.net mvc LessThanOrEqualTo 不触发的不显眼的客户端验证

asp.net - 网站图标-MVC3 ASP.NET

c# - List<model> 中的简单下拉列表

javascript - Ajax .BeginForm 在 IE9 中返回空白 View

javascript - 检查空数据库值