views:

40

answers:

0

I am using a rescue derived from 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);
    }
}

Now when using the file upload in jQuery.form, Request.IsAjaxRequest() returns false. Apparently this is because you can't actually upload a file using json; this plugin generates a hidden iframe to do the upload.

To compensate I am appending a hidden input to any form that is submitted with jquery.form and has file inputs:

$(this).append('<input type="hidden" name="X-Requested-With" value="XMLHttpRequest" />');

It's good enough to fool IsAjaxRequest. Is there any reason why I shouldn't do this?