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# - 如何在不丢失 session 的情况下更新 asp net webforms 或 mvc 应用程序?

asp.net-mvc - MVC3 混合表单和 Windows 身份验证

javascript - 这个 Javascript 片段有什么作用(jQuery 迁移文件的开始)

html - 良好的 MVC 实践 - 何时使用分部 View

javascript - 从Datepicker检索输入数据

asp.net-mvc - ActionFilterAttribute - 事件顺序

javascript - 更新嵌套表单的路由

jquery - Woocommerce:有什么方法可以绕过和替换结帐表单验证?

knockout.js - 将 Mvc 模型传递给 KnockoutJS 的最佳实践

asp.net-mvc-4 - 我可以按特定顺序将两个 bundle 合并在一起,例如将两个 bundle 连接起来并为其生成一个 bundle 吗?