Получение динамического пути на основе щелкнутой ссылки

#c# #asp.net #gridview #directory #dynamic-data

#c# #asp.net #просмотр сетки #каталог #динамические данные

Вопрос:

 //aspx.cs file


  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.IO;

  public partial class trash : System.Web.UI.Page
  {
protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("<table style='width: 10px; height: 10px; margin-left:100px'>");

    foreach(var directory in new DirectoryInfo("C:\Users\naresh\Documents\Visual  Studio 2010\WebSites\CMANAGER").GetDirectories())
    { 

 Response.Write( "<tr>");      
    Response.Write("<td><a href= view4.aspx?folder="  directory.Name   "> "  directory.Name  "</a></td>");

 Response.Write("</tr>");
        }
    Response.Write("</table>");
}
  

}

С помощью этого кода я перечисляю все каталоги в данном каталоге с гиперссылками.Итак, если я сейчас нажму на гиперссылку, я должен вывести список всех файлов в определенном каталоге на отдельной странице.Но у меня возникла проблема с предоставлением динамического пути на основе щелкнутой гиперссылки. Пожалуйста, помогите мне в этом отношении. Спасибо..

Ответ №1:

Я думаю, вы хотите использовать directory.Полное имя для гиперссылки. Многим вам нужно кодировать URL-адрес, а затем декодировать его на новой странице, когда вы считываете его из строки запроса.

В view4.aspx после считывания папки из строки запроса снова создайте объект directory info и выполните итерацию по результатам directory.GetFiles()

Вот ссылка на класс DirectoryInfo для получения дополнительной информации http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.aspx

Ответ №2:

Используя ASP.NET MVC 2 (который намного лучше, чем помещать все в Page_Load ), вы могли бы сделать это следующим образом:

HomeController.cs:

 using System.IO;
using System.Web.Mvc;

namespace SO_web_directory.Controllers
{
    public class HomeController : Controller
    {
        private static readonly string DefaultDirectory = @"C:";

        public ActionResult Index(string path)
        {
            if (string.IsNullOrWhiteSpace(path))
                path = DefaultDirectory;

            return View(new DirectoryInfo(path).GetDirectories());
        }
    }
}
  

Index.aspx:

 <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
  Inherits="System.Web.Mvc.ViewPage<System.IO.DirectoryInfo[]>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
  Directories
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  <table style='width: 10px; height: 10px; margin-left:100px'>
    <% foreach (var directory in Model)
      { %>
        <tr>
          <td>
            <%= Html.ActionLink(
                    directory.Name, "Index",
                    new RouteValueDictionary { { "path", directory.FullName } }) %>
          </td>
         </tr>
        <%
      }%>
  </table>
</asp:Content>