gpt4 book ai didi

c# - 错误处理 MVC View 与 PartialView

转载 作者:行者123 更新时间:2023-12-03 08:54:59 24 4
gpt4 key购买 nike

我已经阅读了很多关于 MVC 中的错误处理的内容(特别是关于应用 HandleError 属性和关于在 Global.asax 上使用 Application_Error 的内容)。我有兴趣优雅地处理以下类型的异常:

  • Controller 内部抛出的异常
  • 在 View 中执行数据绑定(bind)时抛出的异常。

  • 目前我的应用程序的行为方式如下
  • Controller 中抛出的所有异常都未处理。他们到达 Global.asax
  • 的 Application_Error 方法。
  • View 中的所有异常都未处理并到达 Global.asax
  • 的 Application_Error 方法
  • 在 Application_Error 方法中,我记录异常,确定应用程序是在本地运行还是在远程运行。如果是这样,我会向用户显示蓝屏,或者执行 Response.Redirect 到自定义错误页面。

  • 此逻辑适用于呈现父 View 或父 View 本身的 Controller 内部引发的错误。这种逻辑的缺点是,当在应该呈现 PartialView 的子操作中引发错误时,整个页面将变得不可用。这是因为黄色错误屏幕或自定义错误页面占据了整个页面,不允许用户查看网页的其他部分。

    我想做/知道的是是否有可能:
  • 在局部 View 内显示黄色错误屏幕,但正确呈现页面的其余部分。
  • 将用户重定向到允许页面的其余部分保持可用的部分 View 错误页面。
  • 最佳答案

    要处理这种特定情况:

    "when an error is thrown inside a Child Action which should render a PartialView the whole page becomes unusable."



    您可以为“ajaxError”定义一个全局 Ajax 事件处理程序,以处理使用“@Html.Partial”调用的操作引发的异常。

    除了处理“Application_Error”中的所有错误外,我们还在 _Layout.cshtml 中定义了以下全局处理程序。这基本上可以处理从 html 调用部分 View 并且操作引发异常的情况。如果遇到错误,则会记录数据并显示 toastr 弹出消息。

    _Layout.cshtml:
        //Ajax Global Event Loader
    globalVar: ajaxContainer = $('div[id=wrap]');
    $(document).bind("ajaxSend", function () {
    if ($('.k-loading-mask').is("visible") == false) {
    var loader = new ajaxLoader(ajaxContainer, { bgColor: '#fff', duration: 800, opacity: 0.3, classOveride: false });
    }
    }).bind("ajaxComplete", function () {
    if ($('div[class=ajax_overlay]').is(':visible') == true)
    $('div[class=ajax_overlay]').remove();
    }).bind("ajaxError", function (event, jqxhr, settings, thrownError) {
    //debugger;
    $('div[class=ajax_overlay]').remove();
    $('.k-loading-image').remove();
    if ((settings.url.indexOf('Notification/GetActiveNotificationByUserName') < 0)
    && (settings.url.indexOf('LogError/LogData') < 0)) {
    var errorData = 'URL: ' + settings.url + '; Type: ' + settings.type + '; Data: ' + settings.data + '; thrownError: ' + thrownError;
    var model = { errorData: errorData };

    $.ajax({
    url: '@Url.Action("LogData", "LogError")',
    contentType: 'application/json; charset=utf-8',
    type: 'POST',
    dataType: 'html',
    data: JSON.stringify(model)
    })
    .success(function (result) {
    $("div.overlay").hide();
    })
    .error(function (xhr, status) {
    $("div.overlay").hide();
    //alert(status);
    });

    // Set toastr for error notification and display error 1 at a time
    toastr.options.closeButton = true;
    toastr.options.positionClass = 'toast-top-full-width';
    toastr.options.showMethod = 'slideDown';
    toastr.options.hideMethod = 'slideUp';
    toastr.options.showDuration = '1000';
    toastr.options.hideDuration = '1';
    toastr.clear();
    toastr.error('Your request cannot be processed right now. Please try again later!');
    }

    $("div.overlay").hide();
    });

    关于c# - 错误处理 MVC View 与 PartialView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29354146/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com