【发布时间】:2014-09-05 07:27:38
【问题描述】:
我有这个 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;
}
}
当一切正常时,我的页面会被很好地重定向。 当发生错误并且我的模型无效时,它应该保留在同一页面上。 出于某种原因,我被重定向到我的概览页面。
【问题讨论】:
-
jQuery 没有出错,因为 ajax 调用工作正常。
-
返回
null不会导致ajax函数失败。您应该在成功函数中测试结果 -if(result) {do something } else { null was returned so do something else } -
对于通过 Ajax 调用的操作方法,最好将返回类型设置为
JsonResult而不是ActionResult。因此,您可以简单地返回字符串并验证 $.ajax 方法的成功/失败函数。
标签: c# jquery asp.net-mvc redirect