7

新手问题,试图找出是否已发送电子邮件并显示结果,似乎无法使其正常工作。

function SendPreview() {
    var value = CKEDITOR.instances['Source'].getData();
    alert(value);
    var model = { EmailBody: value.toString(), EmailTo: $("#SendTo").val(), EmailSubject: $("#Subject").val() };
    var request = $.ajax({
        url: '/Campaign/SendPreviewEmail',
        async: false,
        type: 'POST',
        dataType: 'JSON',
        data: { model: JSON.stringify(model) },
        cache: false,
        success: function (data) {
            if (data) {
                alert("Message Sent");
            } else {
                alert("Message Not Sent, Please check details");
            }
        }
    });
}
[HttpPost]
[ValidateInput(false)]
public bool SendPreviewEmail(string model)
{
    var e = new EmailPreview();
    JavaScriptSerializer objJavascript = new JavaScriptSerializer();

    e = objJavascript.Deserialize<EmailPreview>(model);
    if (!string.IsNullOrEmpty(e.EmailTo) && !string.IsNullOrEmpty(e.EmailSubject) && !string.IsNullOrEmpty(e.EmailBody))
    {
        if (IsValidEmail(e.EmailTo))
        {
            _mailService.SendMail(account.Email, e.EmailTo, e.EmailSubject, e.EmailBody, true);
            return true;
        }
    }
    return false;
}
4

2 回答 2

15

假设这是 ASP.Net MVC,您应该ActionResult从您的操作中返回一个(或至少从它派生的东西)。下一个问题是返回true将意味着toString()将调用该bool值,从而产生字符串"True"or "False"。请注意,这两者都等同true于 javascript。相反,返回包含结果标志的 JSON。

在 jQuery 代码中,您还设置async: false了使用起来非常糟糕的做法。事实上,如果您检查控制台,您会看到浏览器对其使用的警告。您应该删除该属性,以便异步发出 AJAX 请求。您还在通话中设置为dataType,但实际上返回的是一个字符串。试试这个:JSONajax()

function SendPreview() {
    var value = CKEDITOR.instances['Source'].getData();
    var model = { EmailBody: value.toString(), EmailTo: $("#SendTo").val(), EmailSubject: $("#Subject").val() };
    var request = $.ajax({
        url: '/Campaign/SendPreviewEmail',
        type: 'POST',
        dataType: 'JSON',
        data: { model: JSON.stringify(model) },
        cache: false,
        success: function (data) {
            if (data.emailSent) { // note the object parameter has changed
                alert("Message Sent");
            } else {
                alert("Message Not Sent, Please check details");
            }
        }
    });
}
[HttpPost]
[ValidateInput(false)]
public ActionResult SendPreviewEmail(string model)
{
    var e = new EmailPreview();
    var result = false;
    JavaScriptSerializer objJavascript = new JavaScriptSerializer();

    e = objJavascript.Deserialize<EmailPreview>(model);
    if (!string.IsNullOrEmpty(e.EmailTo) && !string.IsNullOrEmpty(e.EmailSubject) && !string.IsNullOrEmpty(e.EmailBody))
    {
        if (IsValidEmail(e.EmailTo))
        {
            _mailService.SendMail(account.Email, e.EmailTo, e.EmailSubject, e.EmailBody, true);
            result = true;
        }
    }
    return Json(new { emailSent = result });
}
于 2013-09-06T08:00:49.817 回答
3

实际上return并没有将任何内容发送回浏览器,您必须编写要发送回浏览器的数据,可能Response.Write对此并不熟悉。

此外,在客户端

if (data)

对于任何数据都是相同的,如果有任何数据发送回浏览器,它将评估为 true,因此需要检查实际数据,可能是这样的

if (data == 1)

或者,对于 json,它可能是

if (data.success) // if you send a json response.
于 2013-09-06T07:56:11.930 回答