我有这个jquery:
$('#SaveButton').click(function () {
var url = $('#SaveButton').data("url");
var overview = $('#SaveButton').data("overview");
var createurl = $('#SaveButton').data("createurl");
var flag = true;
var picker = $('#DepositDatePicker').data('datetimepicker');
var utcDate = getFormattedDate(picker.getLocalDate());
if (flag) {
$.ajax({
url: url,
type: 'POST',
data: {
DepositTemplateVersionId: $('input#DepositTemplateVersionId').val(),
depositDate: $('#depositDateValue').val()
},
dataType: 'html',
success: function (result) { document.location = overview; },
error: function (x, t, e) { document.localName = createurl; }
});
}
return false;
});
这是我的控制器上发生的事情:
public ActionResult SaveDeposit(DepositCreateScreenDTO depositCreateScreenDTO) //int depositTemplateVersionId, DateTime depositDate)
{
try
{
if (this.ModelState.IsValid)
{
CommandsServiceAgent.Call(c => c.CreateDeposit(depositCreateScreenDTO.DepositTemplateVersionId, depositCreateScreenDTO.DepositDate));
this.Success("Successfully created deposit");
return null;
}
else
{
string Message = "";
var modelStateErrors = this.ModelState.Keys.SelectMany(key => this.ModelState[key].Errors);
foreach (ModelError modelError in modelStateErrors)
{
Message += modelError.ErrorMessage + System.Environment.NewLine;
}
Danger(Message);
return null;
}
}
catch (FaultException<FaultDTO> ex)
{
Danger(string.Format (ex.Message));
return Json(new { Message = ex.Message });
}
catch (Exception)
{
Danger("Error creating deposit");
return null;
}
}
当一切正常时,我的页面会被重定向。 当发生错误并且我的模型无效时,它应该保持在同一页面上。 出于某种原因,我会重定向到我的概述页面。
答案 0 :(得分:0)
ajax结果总是调用success函数,因为你返回null ... 要在ajax语句中调用error函数,您的控制器方法必须抛出异常:
if (this.ModelState.IsValid)
...
else
throw new HttpException("Error ....");
但是,您可以在ajax语句中处理它:
success: function (result) {
if (result)
// error...
else
// redirect...
}