Asp.net mvc PartialViewResult正在返回带有母版页的视图

Asp.net mvc PartialViewResult正在返回带有母版页的视图,asp.net-mvc,Asp.net Mvc,我编写了自己的HandleError属性 当ajax请求期间发生错误时,我希望返回partialview,当请求为非ajax时,应返回带有母版页的视图 到目前为止,我写了这个 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class IcpHandleErrorAttribute : FilterAttri

我编写了自己的HandleError属性

当ajax请求期间发生错误时,我希望返回partialview,当请求为非ajax时,应返回带有母版页的视图

到目前为止,我写了这个

     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class IcpHandleErrorAttribute : FilterAttribute, IExceptionFilter
{
    private readonly Type _exceptionType = typeof(Exception);

    public IcpHandleErrorAttribute()
    {} 

    public void OnException(ExceptionContext filterContext)
    {
        if (filterContext == null)throw new ArgumentNullException("filterContext");

        if (filterContext.IsChildAction)return;

        if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)return;

        Exception exception = filterContext.Exception;

        if (new HttpException(null, exception).GetHttpCode() != 500)return;

        if (!_exceptionType.IsInstanceOfType(exception))return;

        var controllerName = (string)filterContext.RouteData.Values["controller"];
        var actionName = (string)filterContext.RouteData.Values["action"];

        var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);

        ViewResultBase result;

        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            result = new PartialViewResult { ViewName = "ErrorAjax" };
        }
        else
        {
            result = new ViewResult{ViewName = "Error"}; 
        }

        result.ViewData = new ViewDataDictionary<HandleErrorInfo>(model);
        result.TempData = filterContext.Controller.TempData;

        filterContext.ExceptionHandled = true;
        filterContext.HttpContext.Response.Clear();
        filterContext.HttpContext.Response.StatusCode = 500;

        filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    }
}
属性在global.asax的应用程序\u Start()方法中注册


如果这不是Ajax请求,则需要重定向到某个操作。在这个操作return View()

中,您似乎没有对
结果
局部变量做任何有用的事情,例如将其分配给过滤器上下文:

filterContext.Result = result;

请显示您的自定义HandleError属性的完整代码,以及您在哪里/如何注册它?我添加了完整代码。它是附带代码的一个副本,但稍有修改。尝试此链接可能会有所帮助。是的,此缺少的部分很重要:-),但无论如何它都不起作用。母版页随部分视图一起返回。@user49126,您能提供更多代码吗?您如何从客户端调用该操作?操作会抛出什么错误?您是如何注册自定义属性的?@user49126,在您添加的信息中,我看不到您是如何从客户端代码调用操作方法的。您的
RegisterGlobalFilters
方法看起来怎么样?是否仍有对标准HandleErrorAttribute的调用可能与您的自定义属性冲突?宾果!!在RegisterGlobalFilters方法中调用了standart HandleErrorAttribute。我完全忘记了它。
[HttpPost]
public ActionResult Create(ProjectCreateCommand command)
{
    throw new NotImplementedException("ajax");

    return Post(command);
}
    GlobalFilters.Filters.Add(new IcpHandleErrorAttribute());

    RegisterGlobalFilters(GlobalFilters.Filters);
filterContext.Result = result;