Я использую спасение, полученное из MvcContrib:
public class RescueAttribute : MvcContrib.Filters.RescueAttribute
{
public RescueAttribute(string view) : base(view)
{
IgnoreAjax = false;
}
public RescueAttribute(string view, params Type[] exceptionTypes) : base(view, exceptionTypes)
{
IgnoreAjax = false;
}
protected override ActionResult CreateActionResult(Exception exception, ExceptionContext context)
{
var controller = (string) context.RouteData.Values["controller"];
var action = (string) context.RouteData.Values["action"];
var model = new HandleErrorInfo(exception, controller, action);
if (context.Controller.ControllerContext.HttpContext.Request.IsAjaxRequest())
{
return new JsonResult(model);
}
return base.CreateActionResult(exception, context);
}
}
Теперь, когда использование файла загружает в jQuery.form, Запросе. IsAjaxRequest () возвращает false. По-видимому, это вызвано тем, что Вы не можете на самом деле загрузить файл с помощью json; этот плагин генерирует скрытый iframe, чтобы сделать загрузку.
Для компенсации я добавляю скрытый вход к любой форме, которая отправлена с jquery.form и имеет исходные данные файла:
$(this).append('<input type="hidden" name="X-Requested-With" value="XMLHttpRequest" />');
Это достаточно хорошо для одурачивания IsAjaxRequest. Есть ли какая-либо причина, почему я не должен делать этого?