использование jQuery AjaxForm в проблеме ASP.NET - PullRequest
2 голосов
/ 07 марта 2011

Я использую плагин jQuery AjaxForm Чтобы создать предварительный просмотр изображения, я выбираю пользователя для загрузки на сервер. Я использую Http Handler для создания временного файла изображения, который используется для предварительного просмотра изображения. В ответ на событие onchange на стороне клиента элемента управления FileUpload предварительный просмотр изображения успешно создан.

У меня есть кнопка, которая отправляет всю форму (UploadImageToServerStep1.aspx) на сервер. В серверном событии Click этой кнопки я пытаюсь перенести элемент управления на другую страницу (UploadImageToServerStep1.aspx2), элемент управления получает другой код страницы за файлом (элемент управления попадает на эту страницу Page_Load, событие) , но страница не отображается - вместо этого снова отображается ссылка на страницу (UploadImageToServerStep1.aspx) (элемент управления не переходит на событие загрузки страницы этой страницы).

Код JS в UploadImageToServerStep1.aspx:

var preview = { ImagePreview: function (imageId) {

    var formId = '<%= Form.ClientID %>';
    var fileUploadId = '<%= FileUpload1.UniqueID %>';
    var action = $('#' + formId).attr('action');
    var imageName = $("input[serverId = 'FileUpload1']").val();
    $('#' + formId).attr('action', './HttpHandlers/ImagesHandler.ashx?action=imagePreview&f=' + fileUploadId + '&i=' + imageName);
    $('#' + formId).ajaxForm(function() {
        $('#' + imageId).attr('src', './HttpHandlers/ImagesHandler.ashx?action=imagePreview&f=' + fileUploadId + '&i=' + imageName);
        $('#' + imageId).show();
        $('#' + formId).attr('action', action);
    });
    $('#' + formId).submit();
}

}; /

В UploadImageToServerStep1.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {

        FileUpload1.Attributes.Add("onchange", "preview.ImagePreview('htmlImgPreview');");
        FileUpload1.Attributes.Add("serverId", "FileUpload1");

    }
}


protected void btnNext_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        Response.Redirect("UploadImageToServerStep2.aspx");
        //Server.Transfer("UploadImageToServerStep2.aspx");
     }
}

В HttpHandler:

 case "imagePreview":
            string f = context.Request.QueryString.Get("f");
            string i = context.Request.QueryString.Get("i");

            const string uploadImageTempPath = "~/Images/TempImages/";
            if (!string.IsNullOrEmpty(context.Request.QueryString.Get("i")) && context.Request.Files[f] != null)
            {
                HttpPostedFile file = context.Request.Files[f];
                SaveImage(context, file, uploadImageTempPath, i);
            }
            context.Response.ContentType = GetContentType(context.Session["fileName"].ToString());

            if (context.Session["fileName"] == null || context.Request["i"] == null)
            {
                return;
            }

            byte[] byteArray1 =
                System.IO.File.ReadAllBytes(
                    context.Request.MapPath(string.Format("{0}{1}", uploadImageTempPath, context.Session["fileName"])));
            context.Response.BinaryWrite(byteArray1);
            break;

    }

Может кто-нибудь написать, в чем причина такого поведения и как я могу решить эту проблему

Спасибо

1 Ответ

0 голосов
/ 11 мая 2011

При попытке сделать response.redirect в ответ на вызов ajax ваш браузер не будет вести себя так же, как при обычном синхронном запросе.Однако вы можете взять ответ и сделать что-то с ним на стороне JS.Я верю, что это поможет вам.

Возврат перенаправления в ответ на запрос XHR

...