带标题的多个图像文件上传

2024-02-04

我设法得到了字幕foreach循环但现在我面临一个新问题。

由于嵌套循环,我的数据库中出现重复项,请检查下面的代码。

JavaScript

window.onload = function () {
    if (window.File && window.FileList && window.FileReader) {
        var filesInput = document.getElementById("galleryFilesAdd");
        filesInput.addEventListener("change", function (event) {
            var files = event.target.files; //FileList object
            var output = document.getElementById("result");
            for (var i = 0; i < files.length; i++) {
                var file = files[i];
                if (!file.type.match('image'))
                    continue;
                var picReader = new FileReader();
                picReader.addEventListener("load", function (event) {
                    var picFile = event.target;
                    var div = document.createElement("div");
                    div.innerHTML = "<img class='thumbnail img-responsive' alt='" + picFile.name + "' + height='220' width='300'; src='" + picFile.result + "'" +
                            "title='" + picFile.name + "'/><button type='button' class='delete btn btn-default' class='remove_pic'> <span class='glyphicon glyphicon-remove' aria-hidden='true'></span></button><input type='text' id ='imagecaption[]' name='imagecaption[]' class='form-control' placeholder='Add Image Caption'>"
                    output.insertBefore(div, null);
                    div.children[1].addEventListener("click", function (event) {
                        div.parentNode.removeChild(div);
                    });
                });
                //Read the image
                picReader.readAsDataURL(file);
            }
        });
    }
    else {
        console.log("Your browser does not support File API");
    }
}

控制器

public async Task<ActionResult> AddHotel(HotelViewModels.AddHotel viewModel, IEnumerable<HttpPostedFileBase> galleryFilesAdd)
{
    try
    {
        if (ModelState.IsValid)
        {

            foreach (var files in galleryFilesAdd)
            {
                var fileName = Guid.NewGuid().ToString("N");
                var extension = Path.GetExtension(files.FileName).ToLower();
                string thumbpath, imagepath = "";
                using (var img = Image.FromStream(files.InputStream))
                {
                  foreach (var caption in viewModel.imagecaption)
                  {
                    var galleryImg = new hotel_gallery_image
                    {
                        hotel_id = hotel.id,
                        thumbPath = String.Format("/Resources/Images/Hotel/GalleryThumb/{0}{1}", fileName, extension),
                        imagePath = String.Format("/Resources/Images/Hotel/Gallery/{0}{1}", fileName, extension),
                        entry_datetime = DateTime.Now,
                        guid = Guid.NewGuid().ToString("N"),
                        enabled = true,
                        image_caption = caption
                    };
                    db.hotel_gallery_image.Add(galleryImg);
                }
            }
          }

            await db.SaveChangesAsync();
            return RedirectToAction("Index", "Hotel");
        }
    }
    catch (DbEntityValidationException ex)
    {
        string errorMessages = string.Join("; ", ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.PropertyName + ": " + x.ErrorMessage));
        throw new DbEntityValidationException(errorMessages);
    }
    viewModel.Country = await db.countries.ToListAsync();
    return View(viewModel);
}

和视图模型

public string[] imagecaption { get; set; }

已将数据插入数据库


我认为问题出在你的

image_caption = viewModel.imagecaption

因为你迭代了var files in galleryFilesAdd你使用相同的参考image_caption from viewModel在每次迭代中,所以你需要过滤你的image_caption取决于另一个数据(文件名或您选择的另一个数据)viewmodel包含)。

UPDATE理想情况下,如果您的 ViewModel 和文件(例如文件名)具有相同的属性,那么您可以执行类似的操作thatimage_caption = viewModel.FirstOrDefault(x=>x.Filename == filename).imagecaption

为了更具体,如果您提供您的代码会很有帮助Viemodel and galleryFilesAdd类。

UPDATE 2

在你的情况下,你迭代第二个 foreachwhole收集imagecaption数组,每次迭代时galleryFilesAdd集合,这会导致数据库中出现重复数据。 如果您可以按顺序获取第一个文件的标题,从 imagecaption 数组中获取第一个元素,依此类推,那么您可以使用如下代码:

if (ModelState.IsValid)
        {
            int index = 0;
            foreach (var files in galleryFilesAdd)
            {
                var fileName = Guid.NewGuid().ToString("N");
                var extension = Path.GetExtension(files.FileName).ToLower();
                string thumbpath, imagepath = "";
                using (var img = Image.FromStream(files.InputStream))
                {
                 if(index < viewModel.imagecaption.Length){
                    var galleryImg = new hotel_gallery_image
                    {
                        hotel_id = hotel.id,
                        thumbPath = String.Format("/Resources/Images/Hotel/GalleryThumb/{0}{1}", fileName, extension),
                        imagePath = String.Format("/Resources/Images/Hotel/Gallery/{0}{1}", fileName, extension),
                        entry_datetime = DateTime.Now,
                        guid = Guid.NewGuid().ToString("N"),
                        enabled = true,
                        image_caption = viewModel.imagecaption[index]
                    };
                    db.hotel_gallery_image.Add(galleryImg);
                    index++;
                   }
            }
          }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带标题的多个图像文件上传 的相关文章

  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • 在循环中调用 setTimeout 未按预期工作

    下面的 JavaScript 应该 在我看来 以 0 5 秒的间隔播放一系列音符 但它会将它们全部作为一个同时的和弦来演奏 知道如何修复它吗 function playRecording if notes length gt 0 for v
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • 如何将项目插入到特定索引处的空数组中?

    我想将一个项目插入到空数组的指定索引中 我看到有 Array prototype splice 方法 但是 如果我在空数组上使用 splice 它只会添加项目来结束数组 如下所示 var a a splice 3 0 item 3 cons
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • PHP Json_encode 将空格更改为加号 +

    我有一个网络应用程序 我首先将 JSON 数据存储在 cookie 中 然后每 x 秒保存到数据库 它只是打开与服务器的连接 服务器读取 cookie 它实际上并不通过 POST 或 GET 发送任何内容 当我保存到 cookie 时 我的
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 如何将数据推送到嵌套对象

    如何将另一个元素推入variables来自以下对象的属性 var request name Name id 3 rules name Rule name tags tagId 1 variables variable var1 matchT
  • highchart堆积柱每个类别的总数据

    我想获取每个类别的总数据 这point stackTotal只给出活动数据的总数 从我粘贴的代码示例中 我想知道每种水果的总消耗量 因此 即使我单击右上角图例上的乔的名字 这使得堆叠图表上的所有乔信息都处于非活动状态 我仍然可以知道约翰 简
  • 如何使用文本输入来定位?

    我想使用 jQuery 通过文本框转到锚点 例如 我想使用以下形式
  • .Net Reactive Extensions Framework (Rx) 是否考虑拓扑顺序?

    Net 反应式扩展框架是否按拓扑顺序传播通知以最大限度地减少更新量 就像 Scala Rx 所做的那样 Net 反应式扩展 Rx 是否可以 https github com lihaoyi scala rx wiki How it Work
  • 在 Firestore 文本字段中存储文本文件并删除换行符

    我正在尝试将 CSV 文件存储在 Cloud Firestore 内的文本字段中 然而 Firestore 正在删除所有换行符并将整个 CSV 文件存储为一行 这Firestore 数据类型文档 https firebase google
  • jQuery:如何正确使用 .stop() 函数?

    在本页面 http www arvag net old smsbox de http www arvag net old smsbox de 当您将鼠标悬停在 Informationen 和 ber ins 上时 它会显示一个子菜单 当您将

随机推荐

  • 向 MongoDB 中的 $lookup 结果添加一个字段

    我正在尝试使用 node js MongoDB 驱动程序向查找结果添加一个字段 用户有两种提要 1 他或她自己的提要和 2 共享提要 所以我需要同时获得两者 然后将它们结合起来 这是我原来的查询 效果很好 client db atlas c
  • 使用 Google Apps 脚本从 Google Firebase 写入 Google Sheets

    尝试检索存储在名为 条目 的节点下的 google firebase 中的表单条目 并使用 google 表格中的脚本编辑器附加到 google 表格 我已将 FirebaseApp 库添加到 Google Sheet 脚本编辑器中 然后我
  • 移动第二列中的 li 项目 - 仅限 CSS

    I have UL and LI列表和最大项目数为 10 如果超过 5 个项目 我试图将项目移动到第二列 并且只想使用 CSS 进行处理 我尝试使用 CSS3 Column 但它与所有项目一起进入第二列 如何做我确保将超过 5 个的项目移至
  • 在虚拟服务器上运行外部程序

    我想将可通过命令行 Linux 操作系统 访问的小程序安装到服务器并使用 PHP 运行它们 我想在我的机器上安装 Apache vhost 有没有办法在我的虚拟服务器 我的系统上运行这些外部应用程序 以便我可以尝试 PHP 调用 我们一直都
  • Jenkins CI:如何在 SVN 提交上触发构建

    我需要设置哪些插件和插件功能才能让我的 Jenkins 作业在代码提交到 SVN 项目时触发构建 我已经安装了标准 SVN 插件以及 SVN 标记插件 但我没有看到任何允许触发器配置的新功能 有两种方法可以解决这个问题 我最初推荐第一个选项
  • Rust 中比较函数的相等性

    我有一个函数 它接受一个数字作为参数 然后根据该数字返回一个函数 根据许多不同的情况 它可能会返回约 50 个函数中的任何一个 并且它应该返回哪个函数的情况变得非常复杂 因此 我想构建一些测试以确保返回正确的函数 到目前为止我所拥有的看起来
  • 更强大的点版本(重复)

    我知道如何录音q到寄存器中 但我想知道是否可以设置一些东西来快速调用最后一个录音 就像 调用最后一个简短的编辑命令 参见here https stackoverflow com questions 12566235 what can the
  • 正则表达式匹配具有两个或多个特殊字符的强密码

    我需要使用 javascript 正则表达式匹配密码字段 并满足以下要求 至少 15 个字符 两个或多个小写字母 两个或多个大写字母 两位或更多数字 以下两个或多个特殊字符 我有一个正则表达式可以处理大多数情况 15 2 d 2 a z 2
  • phpmyadmin 令牌不匹配导致长时间闲置

    我安装了phpMyAdmin 4 0 4 1在我本地的开发环境中 我设置了auth type to config 我还通过此设置提供身份验证要求 cfg Servers i auth type config cfg Servers i ho
  • Google Chrome 强制下载“f.txt”文件

    更新到 Chrome 40 0 2214 111 后 当我访问某些 Google 相关网站 例如http youtube com http youtube com并在视频之前看到广告 浏览器下载一个名为f txt 我没有安装任何 adblo
  • 未找到符号:_libintl_gettext

    我正在尝试使用 C 创建一个 NodeJS 模块node gyp 该软件包依赖于 GNU 的 Gettext 库 我目前使用的是 Mac OS X Mountain Lion 我尝试过通过手动 Homebrew 甚至 Fink 自己安装该软
  • Apple 的 iMessage 模板或向现有应用程序添加扩展之间有什么区别?

    我注意到 iOS 10 消息应用程序的创建有所不同 如果您使用创建一个新项目iMessage Application选择新项目的模板 Xcode 将创建两个目标 一个应用程序和一个扩展 但该项目无法运行 从第二张图片可以看出 底部的目标选择
  • 虚拟继承是否强制基类默认可构造?

    在下面的代码中 编译器正在请求基址class X to be 默认可构造 但是 如果我删除virtual来自继承的关键字类节点 会员的访问权限m x当然 变得含糊不清 但是默认构造函数 for class X不再需要 这是什么原因呢 inc
  • Facebook Open Graph:将网站与 Facebook 页面关联

    我想在我的 Facebook 页面和我的网站之间建立关系 我已经设置了它们 并将 OG 标签添加到网站中 然而 Facebook 页面和我的网站之间似乎没有任何联系 这fb admin标签设置为我的 Facebook 用户 ID 但我想与我
  • ANTLR 歧义问题

    我有这个语法 grammar MyGrammar prog lexeme lexeme TOK INTLIT 0 9 Identifiers Letter Letter Digit fragment Letter a zA Z fragme
  • ASP.NET 会员注册问题

    我在会员资格方面遇到了困难 好吧 这真的很奇怪 我可以注册一个用户 我可以注册 我可以登录 但是 当我去注册另一个用户时 该用户没有保存在数据库中 我得到了一个 当用户尝试登录时 会员凭证验证失败事件 我假设是因为用户从未被保存 这是我用来
  • 将 Java 回调函数传递给 JSNI 方法?

    我想将成功和失败回调 Java 函数传递给 JSNI 方法 这是我到目前为止所得到的 但它不起作用 我该如何修复它 package c public class A test new Callback
  • 如何清除 ttk.Treeview 小部件中的项目?

    ing scroll Scrollbar window1 frame1 orient VERTICAL ingredients ttk Treeview window1 frame1 yscrollcommand ing scroll se
  • 当我打开模式时添加下一个和上一个按钮

    我是新手 我想问您是否可以帮我将下一个和上一个按钮添加到我的模式中 这些图片不是画廊形式的 我是添加 div 还是像这样添加一些 javascript 你能推荐一些吗 var modal document getElementById my
  • 带标题的多个图像文件上传

    我设法得到了字幕foreach循环但现在我面临一个新问题 由于嵌套循环 我的数据库中出现重复项 请检查下面的代码 JavaScript window onload function if window File window FileLis