【问题标题】:Redirect shouldn't happen重定向不应该发生
【发布时间】: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


【解决方案1】:

ajax 结果总是调用success函数,因为你返回的是null... 要在 ajax 语句中调用错误函数,您的控制器方法必须抛出异常:

if (this.ModelState.IsValid)
    ...
else
    throw new HttpException("Error ....");

但是,您可以在 ajax 语句中处理它:

success: function (result) {
    if (result)
        // error...
    else
        // redirect...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-29
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多