在 ASP.NET 中使用 jQuery AjaxForm 问题

Posted

技术标签:

【中文标题】在 ASP.NET 中使用 jQuery AjaxForm 问题【英文标题】:using jQuery AjaxForm in ASP.NET problem 【发布时间】:2011-07-10 08:55:32 【问题描述】:

我正在使用jQuery AjaxForm plugin 创建用户选择加载到服务器的图像的预览。 我使用 Http 处理程序来创建用于图像预览的临时图像文件。 响应 FileUpload 控件的客户端“onchange”事件,图像预览创建成功。

我有一个将整个表单 (UploadImageToServerStep1.aspx) 发送到服务器的按钮。在该按钮的服务器端 Click 事件中,我尝试将控件转移到另一个页面(UploadImageToServerStep1.aspx2),控件获取到文件后面的另一个页面代码(控件获取到该页面 Page_Load 事件)但是页面不显示 - 而是再次显示引用页面(UploadImageToServerStep1.aspx)(控件不执行该页面的页面加载事件)。

UploadImageToServerStep1.aspx中的JS代码为:

var 预览 = ImagePreview:函数(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("01", uploadImageTempPath, context.Session["fileName"])));
            context.Response.BinaryWrite(byteArray1);
            break;

    

有人能写出这种行为的原因是什么,我该如何解决这个问题

谢谢

【问题讨论】:

【参考方案1】:

当尝试执行 response.redirect 以响应 ajax 调用时,您的浏览器的行为方式将与常规同步请求不同。但是,您可以接受响应并在 JS 端对其进行处理。我相信这会对你有所帮助。

Returning redirect as response to XHR request

【讨论】:

以上是关于在 ASP.NET 中使用 jQuery AjaxForm 问题的主要内容,如果未能解决你的问题,请参考以下文章

JQuery Ajax 在asp.net中使用总结

详解JQuery Ajax 在asp.net中使用总结

如何在带有 ADO.NET 的 ASP.NET Core MVC 中使用 jQuery Ajax 自动完成

在 asp.net webservices 中使用 jQuery AJAX 总是出错:而不是成功:

ASP.Net Core中使用jquery-ajax-unobtrusive替换Ajax.BeginForm

使用 ASP.NET MVC 在 JS 文件中为 jQuery 设置 ajax url