【问题标题】:generate a list of URL links for files in folder [javascript]为文件夹中的文件生成 URL 链接列表 [javascript]
【发布时间】:2016-03-23 11:43:54
【问题描述】:

我想为文件夹中的每个文件生成列表。例如,如果我在特定文件夹中有以下文件

  • sample_picture1.jpg
  • sample_picture2.jpg

我想生成如下网址链接


目前我是这样创建的。

在文件夹中查找文件的json方法

    public JsonResult filesinfolder()
    {
        string salesFTPPath = "folder_path";

        DirectoryInfo salesFTPDirectory = new DirectoryInfo(salesFTPPath);

        IEnumerable<string> files = salesFTPDirectory.GetFiles()
          .Where(f => f.Extension == ".xls" || f.Extension == ".xml" || f.Extension == ".jps" || f.Extension == ".jpg" || f.Extension == ".jpeg" || f.Extension == ".png")
          .OrderBy(f => f.Name)
          .Select(f => f.Name);

        return Json(files, JsonRequestBehavior.AllowGet);
    }

获取文件的脚本

$(document).ready(function () {
    $.ajax({
        type: 'GET',
        url: '@Url.Action("filesinfolder", "Home")',
        dataType: "json",
        success: function (data) { onSuccess(data); },
        error: function (xhr, status, err) {}
    });
});

var onSuccess = function (data) {

};

所以我想将结果作为 URL 列表发送到 onSuccess(对于文件夹中的文件)。

【问题讨论】:

  • 您为此使用 ajax 是否有任何具体原因(而不是将文件集合传递给视图并生成链接)
  • @StephenMuecke 因为我需要做一次页面加载我正在使用 ajax ,没有其他原因,还有其他更好的方法吗?
  • 将url集合传递给视图肯定会更简单(理想情况下使用视图模型属性,但它可以是ViewBag属性)。你想对他们做什么? - 创建&lt;img&gt; 元素?
  • 我不清楚问题/问题是什么。这段代码不起作用吗?如果不是,它在做什么,有什么错误等等?
  • 当然。只需在 GET 方法中生成集合,将其分配给视图模型属性,然后在视图中使用 @foreach(string url in Model.Images) { &lt;img scr="@url" height=".." width=".." /&gt; }(请注意,您可能需要 Url.Content() 来生成正确的 url)

标签: javascript jquery asp.net-mvc asp.net-mvc-3


【解决方案1】:

由于您在 document.ready 上执行 ajax 调用,因此似乎不需要使用 ajax,您可以通过将 url 集合传递给视图来简化此操作。假设您使用视图模型,请添加一个属性(例如)IEnumerable&lt;string&gt; ImageUrls { get; set; }(或者您可以将集合分配给ViewBag 属性)

在生成视图的GET方法中

// get the files
IEnumerable<string> files = salesFTPDirectory.GetFiles().Where(....
// build urls
model.ImageUrls = new List<string>();
foreach (string name in files)
{
  model.ImageUrls.Add(Url.Content("~/path") + "/" + name);
}
return View(model);

在视图中

@foreach(string url in Model.ImageUrls)
{
  <img src="@url" height="100" width="100" />
}

假设你查询生成的文件名是sample_picture1.jpgsample_picture2.jpg,那么就会生成

<img src="/path/sample_picture1.jpg" ... />
<img src="/path/sample_picture2.jpg" ... />

如果您确实想使用 ajax 执行此操作,则在 filesinfolder() 方法中生成上述 url 并返回它们,然后在 success 回调中返回它们

success: function (data) {
  $.each(data, function(index, item) {
    var img = $('<img>').attr('src', item);
    $(someElement).append(img);
  });
}

旁注:您有string salesFTPPath = "folder_path"; 但您想生成.../path/... 而不是.../folder_path/... 有点令人困惑(我假设其中一个是错字),但无论如何,这一次都行不通你发布你的应用程序。您需要使用Server.MapPath() 来生成文件夹的正确路径。

【讨论】:

  • 对不起我的错误pathfolder_path是一样的,我会试试这个非常感谢
  • 我应该使用哪些模型属性 public string ImageUrls { get; set; }List
  • 抱歉 - 代码格式不正确 - 使用 IEnumerable&lt;string&gt;(或 List&lt;string&gt;) - 请参阅第一段中的更新
  • 我刚刚将 model.ImageUrls.Add(Url.Content("~/path") + "/" + name); 更改为 model.ImageUrls.Add(Url.Content(Server.MapPath("path") + "/" + name)); 然后我放了一个 html 标签来获取这样的值 &lt;li id="idd"&gt;&lt;/li&gt; 然后我放了这样的警报 alert($('#idd').append(img)); 然后我可以看到 [object][object] 两次不是图片网址吗?
  • 暂时将其保留为model.ImageUrls.Add(Url.Content("~/path") + "/" + name); - 您没有正确使用Server.MapPath("path"),但我们可以稍后对其进行排序。您是否决定使用 javascript/ajax 选项?但我无法理解你实际上在做什么。如果您已将图像添加到模型中,为什么要使用 javascript,img 是什么?而且您需要删除alert() - '警告' 一个函数是没有意义的。
猜你喜欢
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 2013-07-19
  • 2012-01-20
相关资源
最近更新 更多