отобразить содержимое файла asci на веб-странице - PullRequest
0 голосов
/ 20 мая 2011

В моем приложении я хочу отобразить некоторые статические файлы (.html, .htm, .txt), которые будут загружены пользователем (администратором), затем я помещу их в указанную директорию.

Кроме того, администратор может добавить новую папку или файлы в каталог, поэтому я думаю, что использование asp: treeview для отображения списка файлов - хорошая идея, и я нашел это:

http://mattberseth.com/blog/2007/07/hwo_to_create_an_aspnet_ajax_s.html

enter image description here

Древовидное представление слева - это то, что я хочу, даже если оно просто читает папки и выводит список в дереве, поэтому я внес некоторые исправления в список как папок, так и файлов, также я делаю дерево, которое можно редактировать:

Правило.aspx

<form id="form" runat="server">
    <div>
                <table id="tbl" cellpadding="0px" cellspacing="0px">            
                    <tr>
                        <td style="border:solid 1px black" valign="top">
                            <div style="overflow:auto;width:300px;height:450px;">
                                <asp:TreeView 
                                    ID="tvFolders" runat="server" 
                                    OnSelectedNodeChanged="TvFolders_SelectedNodeChanged">
                                    <NodeStyle 
                                        ImageUrl="Img/folder.gif" HorizontalPadding="3px" 
                                        Font-Underline="false" ForeColor="black" />
                                    <SelectedNodeStyle 
                                        Font-Underline="true" Font-Bold="true" />
                                </asp:TreeView> 
                            </div>
                        </td>
                    </tr>
                </table>         
        <br /> 
    </div>
    <!-- The tree editor controls -->
    <div id="addFold" runat="server"></div>
    <div id="addFile" runat="server"></div>
    <div id="deleteFile" runat="server"></div>
    <div id="deleteFold" runat="server"></div>


    <!-- Div used to show the content of the file -->
    <div id="contentDiv" runat="server"></div>
</form>

Правило.aspx.cs:

private DbService db=new DbService();
private bool isAdmin;
protected void Page_Load(object sender, EventArgs e)
{
    isAdmin=db.isUserAdmin(Context.Identify.user.name);

    if (!this.IsPostBack)
    {
        string rootFolder = this.Server.MapPath("files/");

        TreeNode rootNode = new TreeNode("Root", rootFolder);
        rootNode.Expanded = true;
        rootNode.Select();
        this.tvFolders.Nodes.Add(rootNode);

        BindDirs(rootFolder, rootNode);

        //set the editor button display or not according the type of current user
        setEditorVisibility();
    }
}

private void setEditorVisibility(){
    //if user select the directory,and he is the admin,so he can add fold/file under this directory,or delete this fold.
    addFold.visibile=deleteFold.visibile=addFile.visibile=isAdmin && Directory.Exist(ootNode.selectedNode.value);

    // if user select the file,and he is the admin,he can delte/update it.
    deleteFile.visibe=isAdmin && File.Exist(ootNode.selectedNode.value);
}
protected void TvFolders_SelectedNodeChanged(object sender, EventArgs args)
{
    setEditorVisibility();

    //now show the content in the contentDiv of the page
    if(File.Exist(ootNode.selectedNode.value)){
        this.contentDiv.innerHtml=xxxx? 
        //here how to make the content of the file displayed in the div?
        //I am sure the type of the file will be .html .htm or .txt.
    }
}

private static void BindDirs(string path, TreeNode treeNode)
{
    if (!string.IsNullOrEmpty(path))
    {
        foreach (string directoryPath in System.IO.Directory.GetDirectories(path))
        {
            System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo(directoryPath);
            TreeNode subNode = new TreeNode(directory.Name, directory.FullName);
            treeNode.ChildNodes.Add(subNode);

            // bind sub directories
            BindDirs(directoryPath, subNode);
        }

        //add the file in the tree list
        foreach (string filePath in File.getFiles(path))
        {
            FileInfo info = new FileInfo(filePath);
            TreeNode subNode = new TreeNode(info.Name, info.FullName);
            treeNode.ChildNodes.Add(subNode);
        }
    }
}   

Теперь я просто не знаю, как отобразить содержимое файла, когда пользователь выбирает узел, связанный с файлом.

ЛЮБОЕ предложение?

1 Ответ

0 голосов
/ 20 мая 2011

Как насчет:

this.contentDiv.innerHtml=File.ReadAllText(ootNode.selectedNode.value);

РЕДАКТИРОВАТЬ Вышеприведенное вернет обычные окончания строк вместо концов строк html, если это текстовый файл, так что вы можете сделать ниже для текстовых файлов:

this.contentDiv.innerHtml=File.ReadAllText(ootNode.selectedNode.value).Replace("\r\n","</br>").Replace("\r","</br>").Replace("\n","</br>");

Очевидно, все еще требуется обработка исключений

...