-1

メイト、ファイルシステムツリーを列挙するためのクラスの実装に苦労した後、私はそれを機能させるためにtriyngをあきらめました。

ファイルパスのあるテキストボックスがあります。ユーザーがクリックできるようにし、ファイルシステムツリーを表示しているパネルからクリックしてパスを選択できるようにします。

皆さん、それを手伝ってくれませんか。

私が何をしていたかを理解するためだけに、これはコードです:

try
{
    DriveInfo[] allDrives = DriveInfo.GetDrives();

    Response.Write("<ul class=\"jqueryFileTree\" style=\"display: none;\">\n");

    foreach (DriveInfo drive in allDrives)
    {
        if (drive.IsReady == true)
        {
            try
            {
                Response.Write("\t<li class=\"drive collapsed\"><a href=\"#\" rel=\"" + drive.ToString() + "\">" + drive.ToString() + "</a>\n");

                System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(drive.ToString());
                DirectoryInfo[] directories = di.GetDirectories("*.*", SearchOption.AllDirectories);

                Response.Write("<ul>");

                foreach (System.IO.DirectoryInfo di_child in directories)
                {
                    Response.Write("\t<li class=\"directory collapsed\"><a href=\"#\" rel=\"" + drive + di_child.Name + "/\">" + di_child.Name + "</a>\n");
                    Response.Write("<ul>");

                    foreach (System.IO.FileInfo fi in di.GetFiles())
                    {
                        string ext = "";
                        if (fi.Extension.Length > 1)
                        {
                            ext = fi.Extension.Substring(1).ToLower();
                        }

                        Response.Write("\t<li class=\"file ext_" + ext + "\"><a href=\"#\" rel=\"" + drive + fi.Name + "\">" + fi.Name + "</a></li>\n");
                    }
                    Response.Write("</ul></li>");
                }
                Response.Write("</ul></li>");
            }
            catch (UnauthorizedAccessException e)
            {
                Response.Write(e.Message);
                continue;
            }
            catch (System.IO.DirectoryNotFoundException e)
            {
                Response.Write(e.Message);
                continue;
            }
            catch (Exception e)
            {
                Response.Write(e.Message);
                continue;
            }
        }
    }

    Response.Write("</ul>");
}
catch (Exception)
{
    throw;
}   
4

2 に答える 2

1

jqueryFileTreeのドキュメントでは、POSTパラメータを受け取る関数が必要でありdir、ページは次の形式の順序付けられていないリスト(ul)を返す必要があると説明されています。

<ul class="jqueryFileTree" style="display: none;">
    <li class="directory collapsed"><a href="#" rel="/this/folder/">Folder Name</a></li>
    (additional folders here)
    <li class="file ext_txt"><a href="#" rel="/this/folder/filename.txt">filename.txt</a></li>
    (additional files here)
</ul>

これらの手順に従った場合、基本的に2つのページが必要になります。1つは上記の出力を生成するための完全な専用ページで、もう1つはjQueryFileTreeプラグインに必要なjQueryライブラリをホストするためのページです。

Default.aspxしたがって、たとえば、次のようなマークアップを持つが必要です。

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
     <script src="http://labs.abeautifulsite.net/archived/jquery-fileTree/demo/jquery.js" type="text/javascript"></script>
    <script src="http://labs.abeautifulsite.net/archived/jquery-fileTree/demo/jquery.easing.js" type="text/javascript"></script>
    <script src="http://labs.abeautifulsite.net/archived/jquery-fileTree/demo/jqueryFileTree.js" type="text/javascript"></script>
    <link href="http://labs.abeautifulsite.net/archived/jquery-fileTree/demo/jqueryFileTree.css" rel="stylesheet" type="text/css" media="screen" />
    <script type="text/javascript">
        $(document).ready(function () {
            $.post('FileTree.aspx',{dir:'c:\\'}, function (data) {
                $('#filetree').html(data);
                $('.jqueryFileTree').fileTree({ root:'/' ,script: 'FileTree.aspx' }, function (file) {
                    alert(file);
                });
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="filetree">

    </div>
    </form>
</body>
</html>

ここで、と呼ばれるページにリクエストをdocument.ready送信します。このページには、ディレクトリやファイルとして適切なスタイルの目的のコードを実際に作成するコードが含まれています。postFileTree.aspxul>li

ページはFileTree.aspx完全に空である必要がありますが、背後のコードは次のようになっている必要があります。

protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Params["dir"] != null)
        {
            System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(Path.Combine("c:\\", Request.Params["dir"]));
            if (di.Exists)
            {
                DirectoryInfo[] directories = di.GetDirectories("*.*", SearchOption.TopDirectoryOnly);
                Response.Write("<ul class=\"jqueryFileTree\" >\n");
                //Itera sobre os subdiretórios de cada driver
                foreach (System.IO.DirectoryInfo di_child in directories)
                {
                    Response.Write("\t<li class=\"directory collapsed\"><a href=\"#\" rel=\"" + di_child.Name + "/\">" + di_child.Name + "</a>\n");
                }
                foreach (System.IO.FileInfo fi in di.GetFiles())
                {
                    string ext = "";
                    if (fi.Extension.Length > 1)
                    {
                        ext = fi.Extension.Substring(1).ToLower();
                    }

                    Response.Write("\t<li class=\"file ext_" + ext + "\"><a href=\"#\" rel=\"" + fi.Name + "\">" + fi.Name + "</a></li>\n");
                }// Arquivos 
                Response.Write("</ul></li>");
            }
        }
    }

Default.aspxしたがって、最終的に発生するのは、ページをロードするときにFileTree.aspx、ルートフォルダー(c:\\私の例では)をパラメーターとして渡すにajaxリクエストを送信し、レンダリングされたフォルダーのいずれかをさらにクリックすると、jQueryFileTreeがajax投稿リクエストを送信し続けることです。FileTree.aspxディレクトリ名を選択します。

私の特定の実装では、生成される出力は次のとおりです。

ここに画像の説明を入力してください

ここで、上記のコードは、ファイルシステムを読み取るのに十分な権限を持つユーザーの下でWebアプリが実行されている場合にのみ機能することに注意してください。これは、デフォルトでは当てはまりません。このためにIISを構成する必要があります。

また、上記のコードは元のバージョンから大幅に変更されていることに注意してください。これを行ったのは、ファイルシステム全体をロードしようとしていて、これは非常に長い、loooooooong操作であるためです。通常は、最上位のディレクトリをロードし、各ディレクトリがクリックされたときにのみ、その内容をロードしてみます。すべてを一度にロードしようとしないでください。そうしないと、誰もアプリを使いたくないでしょう。

とにかく、これがあなたを正しい方向に向けることを願っています...

于 2012-11-27T21:08:06.537 に答える
0

既存のソリューションの1つを使用してみませんか: http ://www.ajaxline.com/best-javascript-tree-widgets ?

于 2012-11-27T20:39:29.830 に答える