列出asp.net mvc文件夹中的文件

kez*_*kez 1 javascript ajax asp.net-mvc file-io json

我想在页面加载时列出文件夹中的所有文件。所以

为此,我刚刚创建了这样的

HTML代码

<input id="idd" type="file" multiple="true" class="file" data-preview-file-type="text">
Run Code Online (Sandbox Code Playgroud)

脚本

@section scripts{   

 <script type="text/javascript">    

  $(document).ready(function () {
        $.ajax({
            url: '/Home/filesinfolder',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                $.each(data, function (index, val) {
                    $('#idd').append('<li><a href="http://'+ val.Url +'" target="_new">' + val.Url + '</a></li>');
                });
            },
            error: function (xhr, status, err) {
                console.log('Response code:' + xhr.status);
                console.log('[Error:' + err + '] ' + status);
            }
        });
    });

</script>
Run Code Online (Sandbox Code Playgroud)

控制器方法

    public JsonResult filesinfolder()
    {
        DirectoryInfo salesFTPDirectory = null;
        FileInfo[] files = null;

        string salesFTPPath = "C:/filePath";

        salesFTPDirectory = new DirectoryInfo(salesFTPPath);
        files = salesFTPDirectory.GetFiles();

        files = files.OrderBy(f => f.Name).ToArray();

        var salesFiles = files.Where(f => f.Extension == ".xls" || f.Extension == ".xml" || f.Extension == ".jps" || f.Extension == ".jpg" || f.Extension == ".jpeg" || f.Extension == ".png");

        return Json(salesFiles.ToList());
    }
Run Code Online (Sandbox Code Playgroud)

但这根本没有列出任何内容,但是一旦我调试,我就可以看到此filesinfolder方法调用并在文件夹中查找文件。

小智 6

你有很多错误

  1. 带有id="idd"是 an的元素,<input>您不能将<li>元素附加 到 an <input>(仅一个<ul>元素)
  2. 您的 ajax 调用正在进行 GET 调用,但您尚未包括在内, JsonRequestBehavior.AllowGet因此不会返回任何内容
  3. 您尝试返回List<FileInfo>但访问Url 不存在的属性。
  4. 即使您要访问(比如说)FullName属性,创建 <a href="http://C:/filePath.someFileName.xls也不会导航到服务器上的文件

既然您只想要文件名,那么您的代码应该是

html

<ul id="filelist"></ul>
Run Code Online (Sandbox Code Playgroud)

脚本

$(document).ready(function () {
$.ajax({
  url: '@Url.Action("filesinfolder", "Home")', // don't hardcode
  dataType: "json",
  success: function (data) {
    $.each(data, function (index, item) {
      $('#filelist').append($('<li></li>').text(item));
    });
  },
   error: function () {

  }
   });
 });
Run Code Online (Sandbox Code Playgroud)

请注意该contentType选项不是必需的

控制器

public JsonResult filesinfolder()
{
    string salesFTPPath = "C:/filePath";
    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.FullName);
    return Json(files, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)