当前位置: 首页 > 面试题库 >

MVC中的AJAX上传脚本问题

蒋泰
2023-03-14
问题内容

我在这里http://www.phpletter.com/Demo/AjaxFileUpload-
Demo/
找到了这个ajax文件上传脚本

应该将ajax功能添加到我的文件上传表单中

<div id="dialog" title="Upload Image">
           <%
            Html.BeginForm("Upload", "BugTracker", FormMethod.Post,new { id="uploadForm",  enctype = "multipart/form-data"});
           %>

                Select a file: <input type="file" name="file" id="file" />   
                <h6>Upload a screenshot related to the ticket</h6>
                <input type="submit" class="button" value="Upload" id="upload" onclick="uploadImage();" name="submit" />


            <%Html.EndForm();%>
</div>

我设置了一个在提交上传表单时要调用的函数,如下所示:

function uploadImage() {

    var action = $("#uploadForm").attr('action');

    $.ajaxFileUpload({
        url: action,
        secureuri: false,
        fileElementId: 'file',
        dataType: 'json',
        success: function (data, status) {
            $("#RelatedFileName").val() = data.FileName;
            $("#dialog").dialog("close");
        }
    });
    return false;
}

但它跳过了成功回调函数,浏览器询问我是否要下载json文件。看一下我的上传操作:

 [HttpPost]
        public ActionResult Upload(HttpPostedFileBase file)
        {
            Regex imageFilenameRegex = new Regex(@"(.*?)\.(jpg|jpeg|png|gif)$");
            if (file != null)
            {
                if (!imageFilenameRegex.IsMatch(file.FileName))
                {
                    return JavaScript("alert('invalid file. you must upload a jpg, jpeg, png, or gif');");
                }
                else
                {
                    string filePath = Path.Combine(HttpContext.Server.MapPath("~/Uploads"), Path.GetFileName(file.FileName));
                    file.SaveAs(filePath);

                    return Json(new { FileName = "/Uploads/" + file.FileName });
                }
            }
            else
            {
                return JavaScript("alert('seriously? select a file to upload before hitting the upload button.');");
            }
        }

我使用了jQuery.post,它将执行控制器操作,但文件将为null,但至少会在其警报框中弹出错误,因此这就是我寻求其他选择的原因。现在它命中了控制器动作,文件被上传,但是它没有处理任何响应。任何帮助表示赞赏。


问题答案:

text/html即使您传递的是JSON,您使用的插件也应作为响应的内容类型。因此,如果您真的想使用它,则需要执行以下操作:

return Content("{ FileName: '/Uploads/' }", "text/html");

如您所知,这很糟糕。

因此,继续下载jquery表单插件。它更容易使用。您无需在HTML中执行任何操作,这完全不麻烦。只需将表单保留为原样,并在javascript中简单地进行以下操作:

$(function() {
    // Only indicate the form id, it will take care of reading the form action, 
    // returning false, ..., all you need is to concentrate 
    // on the success callback
    $('#uploadForm').ajaxForm(function(result) {
        alert(result);
    });
});

另请注意,如果发生错误,则不应返回Javascript。您始终需要从控制器操作中返回Json。因此,如果出现错误:

return Json(new { errorMessage = "Kaboom", fileName = "" });

如果成功:

return Json(new { errorMessage = "", fileName = "/Uploads/" + file.FileName });

因此,现在您可以通过检查errorMessage返回的JSON对象上的属性来检查是否存在错误:

$('#uploadForm').ajaxForm(function(result) {
    if (result.errorMessage != '') {
        alert(result.errorMessage);
    } else {
        $('#RelatedFileName').val(result.fileName);
        $('#dialog').dialog('close');
    }
});


 类似资料:
  • 问题内容: 我认为有一个文件 和一个ajax请求 但是 Request.Files中 没有文件。Ajax请求出了什么问题? 问题答案: 在ASP.Net MVC中使用AJAX上传文件 自HTML5以来情况发生了变化 的JavaScript 控制者 编辑 :HTML

  • 本文向大家介绍Ajax上传图片的本质,包括了Ajax上传图片的本质的使用技巧和注意事项,需要的朋友参考一下 1.图片上传到服务器。 2.后台将图片地址传到html页面,以图片形式展现。 3.后天将图片地址加入到input表单中,表单处于隐藏状态。 4.前端删除图片,通过js操作,移除图片与表单数据。 5.图片上传表单,是单独的。不能嵌套在总的表单中。 6.牛逼的图片上传,可以对图片进行处理。压缩,

  • 问题内容: 我有一个用ASP.NET MVC编写的网站。我有一个页面,用户可以在其中创建小文章。他们可以在本文中选择图片。我有一个页面,他们可以在其中上传图片,在“创建文章”页面上,只需列出它们即可。但是许多人抱怨他们在意识到自己没有上传所需图像之前写了整篇文章。我想要的是用户能够从“创建文章”页面上载图片,然后重新加载我的可能图片下拉菜单供您选择。 我正在考虑在页面上制作一个单独的多部分表单,然

  • 我在Excel中测试脚本实验室插件 我尝试对外部endpoint执行rest调用,如下所示 上面的工作正常。但在启用CORS的endpoint上,我得到了一个xhr.readyState 0。 如何避免CORS问题?我不是终端的主人

  • 问题内容: 我正在尝试将数据发送到我的PHP脚本来处理一些东西并生成一些东西。 在我的PHP文件中,我尝试检索专辑名称。虽然当我验证它时,我创建了一个警报以显示什么都没收到,但是我尝试通过 虽然会说undefined:/ 问题答案: 您正在发送POST AJAX请求,因此请在您的服务器上使用来获取值。我也建议您这样编写请求,以确保正确的编码: 或简称为: 如果您想使用GET请求: 或简称为: 现在

  • 问题内容: 但我不断收到“失败”错误消息框 Index.cshtml 控制者 Files.cshtml Global.asax 问题答案: 更好的方法是使用jquery表单插件。 这是示例: Html.BeginForm 行动方法 进度条 jQuery和表单脚本 更新中… 两次遇到调用操作方法问题的人都归功于Ajax.BeginForm,只需将其转换为Html.BeginForm()。