mvc 中 AJAX 上传脚本的问题

2023-11-30

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

应该将 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 ,它会触发控制器操作,但文件将为空,但至少会在警报框中弹出错误,所以这就是我寻找另一个选项的原因。现在它点击控制器操作并且文件被上传,但它不处理任何响应。任何帮助表示赞赏。


您正在使用的插件需要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');
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mvc 中 AJAX 上传脚本的问题 的相关文章

随机推荐

  • 打开文件夹并最大化文件夹窗口

    我有以下简单的 Powershell 脚本 ii E Source Development websites example com au root ii E Source Development websites example com
  • 生成所有可能的互质的排序列表

    我需要生成所有互质的无限排序列表 每对中的第一个元素必须小于第二个元素 排序必须按升序进行 按对元素的总和 如果两个总和相等 则除以该对的第一个元素 因此 结果列表必须是 2 3 2 5 3 4 3 5 2 7 4 5 3 7 2 9 3
  • Bootstrap 5 下拉菜单向右截断

    User 的下拉列表是 cuf of 我正在使用 Bootstrap 5 我在 stackoverflow 上阅读了一篇较旧的文章 建议将 dropdown menu left dropdown menu right on the 这对我不
  • 如何使用midlrt.exe将.idl编译为.winmd?

    背景 我需要构建一个 Windows 运行时组件作为设置为使用的系统的一部分CMake生成其构建系统 作为准备步骤 我尝试在命令行上构建它 从简单的 idl 文件 MyType idl 开始 namespace NS default int
  • cookie / MAMP / CodeIgniter 的问题

    我在使用 MAMP 和 Codeigniter 读取本地主机上的 cookie 时遇到问题 我正在尝试使用 cookie 来验证对管理区域的访问 我可以设置 cookie 我在浏览器上看到它 Chrome 但在授予访问权限后我无法读取它 我
  • 接受 Java 中的证书

    我在通过 Java 与 HTTPS 站点交互时遇到问题 我的程序每次运行时都会使用一个带有不受信任证书的 URL 该程序必须在多个系统上运行 目前 我有以下内容 public class A HostnameVerifier hv new
  • Google 日历 API - 未从 Execute() C# 返回

    运行下面的代码永远不会从执行函数返回 我的个人 Gmail 帐户上有一个私人日历 已与developer gserviceaccount com 帐户共享 查看 API 管理器 用法 引用显示我已经使用过甚至点击了该 API 任何想法表示赞
  • 将非结构化 csv 文件转换为数据框

    我正在学习 R 用于文本挖掘 我有一个 CSV 格式的电视节目表 节目通常从早上 06 00 开始 一直持续到第二天凌晨 05 00 称为播出日 例如 2015 年 11 月 15 日的节目从早上 06 00 开始 到次日凌晨 05 00
  • 在Java中,如何测试对象的监视器是否被锁定? [复制]

    这个问题在这里已经有答案了 在Java中 如何测试对象的监视器是否被锁定 换句话说 给定一个对象 obj 是否有任何线程拥有 obj 的监视器 我不关心哪个线程拥有监视器 我需要测试的是是否有任何线程拥有给定对象的监视器 由于当前线程以外的
  • 如何在 React 中将多个浏览器特定值添加到 CSS 样式中?

    这主要是为了给定的 CSS 属性定义浏览器特定值 如下所示 div Grab me div 如果我将它包装成这样的对象 div Grab me div 然后您复制对象中的键 在严格模式下会失败 否则会覆盖 并且简单地将所有值放入单个字符串中
  • 应用配色方案

    我正在为现有应用程序开发一个新的 UI 目前使用 VB6 并且被告知要使其看起来更好 更漂亮 有没有什么地方可以让我获得一些关于商业应用程序的配色方案 非 25 度灰度 的好主意 仅供参考 我在 WPF 工作 检查这个应用 用于拍摄配色方案
  • 将 json 反序列化为键值对列表

    我有以下 json key key1 value val1 key key2 value val2 我如何将其反序列化为列表 数组NameValuePair
  • 更新 sqlite 中的查询

    活动代码 String MMS SELECT Name FROM UserData WHERE MessagesSent SELECT max MessagesSent FROM UserData db execSQL UPDATE Mai
  • 关于 MPI_Scatter 执行器及其发送缓冲区分配的问题

    我的第一个想法是MPI Scatter和发送缓冲区分配应该用于if proc id 0 子句 因为数据应该只分散一次 并且每个进程只需要发送缓冲区中的一部分数据 但是它无法正常工作 看来发送缓冲区分配和MPI Scatter在应用程序正常运
  • 从 php 中的 url 获取 #

    我正在尝试使用 facebook API 进行编码 这里说 http developers facebook com docs authentication javascript获取 access token 的东西 但它是在 而不是 之后
  • 如何将数据帧转换为标签特征向量?

    我正在 scala 中运行逻辑回归模型 并且有一个如下所示的数据框 df x y 0 0 0 33 0 58 0 96 0 1 1 21 0 10 0 65 1
  • Intel 和 AMD 如何不同但仍然兼容?

    正如我一直以来的理解 AMD 通过逆向工程英特尔的指令集来构建他们的 CPU 现在向英特尔付费以使用他们的指令集 而英特尔对 AMD 的 64 位指令也做了同样的事情 这就是 Windows 可以在两种类型的 CPU 上安装而无需购买特定版
  • Perl 中哈希键的字符串比较

    我在 Perl 中有一个哈希映射 如下所示 MAP MESSAGE TO NUMBER gt Hello World I am XYZ gt 11 I am using Stack Overflow for Guidance gt 12 P
  • 以编程方式检测 iPad/iPhone 硬件的最佳方法

    我需要找出的原因是 在 iPad 上 UIPickerView 在横向和纵向上具有相同的高度 在 iPhone 上情况有所不同 iPad 编程指南向 UIDevice 引入了一个 idiom 值 UIDevice thisDevice UI
  • mvc 中 AJAX 上传脚本的问题

    我在这里找到了这个ajax文件上传脚本http www phpletter com Demo AjaxFileUpload Demo 应该将 ajax 功能添加到我的文件上传表单中 div title Upload Image Select