asp.net-mvc - JQuery AJAX HandleErrorAttribute 部分 View

标签 asp.net-mvc jquery asp.net-mvc-4 error-handling

我有一个向 MVC Controller 提交表单的函数,如下 -

function submitForm() {
            $.ajax
            ({
                type: 'POST',
                url: '/Users/Index',
                data: $('#searchForm').serialize(),
                beforeSend: function() { 
                    $('.usersearchresult').fadeOut('fast', function () { $('.loadinggif').show(); }); 
                    },
                success: function (response) {
                    $('.loadinggif').hide();
                    $('.usersearchresult').hide().html(response).fadeIn('normal');   
                },
                error: function (response) {
                    alert(response);
                $('.loadinggif').hide();
                $('.usersearchresult').hide().html(response).fadeIn('normal');   
            }
            });

            return false;
        }

我想要一个中央位置来捕获错误,因此我扩展了 HandleErrorAttribute -

public class ClientExceptionAttribute : HandleErrorAttribute
{
    private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    public override void OnException(ExceptionContext  context)
    {
        Log.Error(context.Exception);

        context.ExceptionHandled = true;

        // Verify if AJAX request
        if (context.HttpContext.Request.IsAjaxRequest())
        {
            // Use partial view in case of AJAX request
            var result = new PartialViewResult();
            result.ViewName = "~/views/shared/error.ascx";
            context.Result = result;
        }
    }
}

错误 View 非常简单 -

@model String

@{
    Layout = null;
}


<div class="exception">
    <img src="../Content/Graphics/warning.png" />
    <br />
    <div class="message">@(String.IsNullOrEmpty(Model) ? "User Entry Api is currently unavailable" : Model) </div>
</div>

问题是 AJAX 出错时永远不会渲染部分 View (error.cshtml) - 它只会给我一个空白屏幕。

所以我有两个问题 -

  1. 如何让 AJAX 渲染部分错误 View
  2. 如何将模型传递给 ClientExceptionAttribute 中的分部 View

谢谢!

最佳答案

result.ViewName = "~/views/shared/error.ascx"; 应为 result.ViewName = "Error";

如果有人知道第二个问题的答案,我将不胜感激。

关于asp.net-mvc - JQuery AJAX HandleErrorAttribute 部分 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195724/

相关文章:

c# - Kendo MVC ToDataSourceResult 非常慢,IQueryable 很大

c# - 使用 RouteArea 后 ASP.NET MVC 5 路由停止工作

asp.net - 如何衡量 ASP.NET MVC ActionLink 的成功?

c# - 将 Json 转换为字符串数组

javascript - 格式化 Angular JS/Bootstrap 选项卡

c# - ASP.NET/Entity Framework - 实体类型 PartenaireResult 不是当前上下文模型的一部分

asp.net-mvc - 文件是在给定上下文中无效的方法

c# - 如何在 C# 模型而不是 Controller 中将 bool 值转换为字符串

javascript - 如果为真,则执行其余的 jQuery

asp.net-mvc-4 - ASP.NET MVC 4 返回 Json 导致双 json 或空数据