To, co chcę zrobić, to wyświetlić zawartość folderu, który znajduje się na moim serwerze w widoku w mojej aplikacji MVC.
Mam to, co moim zdaniem powinno być na miejscuAction, jednak „nie jestem pewien, jak przejść do wdrożenia odpowiedniego poglądu i zastanawiałem się, czy ktoś może wskazać właściwy kierunek w tym kierunku. (A także, jeśli ktoś uważa, że moje działanie można poprawić, rada byłaby mile widziana: ))
Oto akcja:
public ActionResult Index()
{
DirectoryInfo salesFTPDirectory = null;
FileInfo[] files = null;
try
{
string salesFTPPath = "E:/ftproot/sales";
salesFTPDirectory = new DirectoryInfo(salesFTPPath);
files = salesFTPDirectory.GetFiles();
}
catch (DirectoryNotFoundException exp)
{
throw new FTPSalesFileProcessingException("Could not open the ftp directory", exp);
}
catch (IOException exp)
{
throw new FTPSalesFileProcessingException("Failed to access directory", exp);
}
files = files.OrderBy(f => f.Name).ToArray();
var salesFiles = files.Where(f => f.Extension == ".xls" || f.Extension == ".xml");
return View(salesFiles);
}
Każda pomoc będzie doceniona, dzięki :)
Odpowiedzi:
5 dla odpowiedzi № 1Jeśli chcesz tylko nazwy plików, możesz zmienić zapytanie Linq na
files = files.Where(f => f.Extension == ".xls" || f.Extension == ".xml")
.OrderBy(f => f.Name)
.Select(f => f.Name)
.ToArray();
return View(files);
Następnie (zakładając domyślny szablon projektu) dodaj następujące elementy do widoku Index.cshtml
<ul>
@foreach (var name in Model) {
<li>@name</li>
}
</ul>
Który wyświetli listę nazw plików
5 dla odpowiedzi nr 2
- IMHO powinieneś wystawiać tylko to, czego naprawdę potrzebuje widok. Pomyśl o tym: czy naprawdę musisz odzyskać całość
FileInfo
obiekt, czy tylko ścieżka do pliku? Jeśli to ostatnie jest prawdziwe, po prostu zwróć aIEnumerable<string>
do widoku (zamiastIEnumerable<FileInfo>
, co robisz w powyższym kodzie). Wskazówka: po prostu dodajSelect
zadzwoń do swojego wyrażenia Linq ... - Wtedy twój widok po prostu renderuje ten model - potrzebna jest pętla foreach i trochę kodu HTML, aby to zrobić.
3 dla odpowiedzi nr 3
To jest uproszczony przykład widoku brzytwy. Wypisze nazwy plików w tabeli HTML.
@model IEnumerable<FileInfo>
<h1>Files</h1>
<table>
@foreach (var item in Model) {
<tr>
<td>
@item.Name
</td>
</tr>
}
</table>