重定向不应该发生

时间:2014-09-05 07:27:38

标签: c# jquery asp.net-mvc redirect

我有这个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;
            }
        }

当一切正常时,我的页面会被重定向。 当发生错误并且我的模型无效时,它应该保持在同一页面上。 出于某种原因,我会重定向到我的概述页面。

1 个答案:

答案 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...
}