即时通讯使用jquery.post。我的问题是,如果我的控制器没有成功,我不知道该返回什么?让我们说如果modelstate无效,请检查下面的控制器。
public ActionResult SendNewsLetter(FooterViewModel viewModel)
{
if (ModelState.IsValid)
{
try
{
var email = _newsletterService.GetAll().Where(x => x.Email == viewModel.Email).SingleOrDefault();
if (email == null)
{
_newsletterService.Save(new NewsletterEmail() { AddedDate = DateTime.Now, Email = viewModel.Email, IdGuid = GenerateGuid.Generate() });
_email.Send(viewModel.Email, "Title", "body", AppSetting.Value(Key.Email()));
}
else
{
_newsletterService.Delete(email.Id);
}
if (Request.IsAjaxRequest())
{
return Content(FeedBackMessages.NewsletterSuccess());
}
else
{
return RedirectToAction("Index", "Home");
}
}
catch (Exception)
{
//What to put here?
}
}
if (Request.IsAjaxRequest())
{
//What to put here?
return Content("");
}
else
{
return RedirectToAction("Index", "Home");
}
}
我的jquery
$('#formNewsletter').submit(function () {
$.post(this.action, $(this).serialize(), function (data) { success(data); });
return false;
});
function success(message) {
//TODO the real success handle
alert(message);
};
答案 0 :(得分:1)
将此附加到您的post()方法以对错误执行某些操作
$.post(this.action, $(this).serialize(), function (data) { success(data); });
return false;
}).error(function() { alert("error"); });
编辑:
要返回空字符串,我会返回JsonResult
。它是ActionResult
的子类,并且有一个名为Data的属性。您可以将json变量添加到此可以通过javascript解释为js变量。如果您不熟悉JSON,请访问http://www.json.org/
非常简单,应该看起来像这样:
catch (Exception)
{
return new JsonResult() { Data = "'Message' : ''" };
//will return a json result with the data set to have a variable `Message` that is an empty string
}
在Js方面它看起来像这样:
$('#formNewsletter').submit(function () {
$.post(this.action, $(this).serialize(), function (data) { success(data); });
return false;
});
function success(data) {
//TODO the real success handle
alert(data.Message); //this should do it, I could be wrong, if so put a break point here and inspect the data object in firebug or dev tools to see where the `Message` json variable is stored.
};
答案 1 :(得分:0)
我不熟悉ASP.NET,但我认为Content(FeedBackMessages.NewsletterSuccess())
会将对象转换为相应的HTTP响应,在这种特殊情况下可能是String
到Content-Type: text/plain
的响应
我的建议是将成功消息包装到一个结果对象中,该对象不仅包含成功或错误消息,还包含相应的状态,如
class Result {
boolean success
String message
}
假设Content()
将对象转换为JSON,您可以返回带有Result
的{{1}}对象,并在您的jQuery成功处理程序中对此进行评估。 (更新:请参阅Matthew Cox的回答,了解如何创建JSON结果对象。)
success=false
也许有一种更简单的原生ASP.NET方法,但是这种方法通常运行良好,并且JS客户端也很好地支持JSON。