Я использую спасение, полученное из 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 Request.IsAjaxRequest () возвращает false.Очевидно, это потому, что вы не можете загрузить файл с помощью json;этот плагин генерирует скрытый iframe для загрузки.
Чтобы компенсировать это, я добавляю скрытый ввод в любую форму, которая отправляется с помощью jquery.form и имеет входные данные:
$(this).append('<input type="hidden" name="X-Requested-With" value="XMLHttpRequest" />');
Это достаточно хорошо, чтобы обмануть IsAjaxRequest.Есть ли причина, по которой я не должен делать это?