新手问题,试图找出发送的电子邮件,并显示结果,似乎无法让它发挥作用。
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;
}
答案 0 :(得分:13)
假设这是ASP.Net MVC,您应该从您的操作中返回ActionResult
(或者至少从其中获取某些内容)。下一个问题是,返回true
将意味着toString()
将调用bool
,从而产生字符串"True"
或"False"
。请注意,这两个等同于javascript中的true
。相反,返回包含结果标志的JSON。
在jQuery代码中,你还设置了async: false
这是一个非常糟糕的做法。事实上,如果您检查控制台,您会看到浏览器有关其使用的警告。您应该删除该属性,以便异步进行AJAX请求。您还在dataType
调用中将JSON
设置为ajax()
,但实际上是返回一个字符串。试试这个:
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 });
}
答案 1 :(得分:3)
实际上return
不会向浏览器发送任何内容,您必须写入要发送回浏览器的数据,可能是Response.Write
,而不是熟悉此内容。
此外,在客户端
if (data)
对于任何数据都是相同的,如果任何数据发送回浏览器,它将评估为true,因此需要检查实际数据,可能是这样的
if (data == 1)
或者,对于json来说,它可能是
if (data.success) // if you send a json response.