Я знаю, что это кажется довольно простым, и это должно быть, но я не могу узнать, где я ошибаюсь. (Я прочитал другие статьи с похожими названиями на SO и другие ресурсы в Интернете, но все же не могу понять это), поэтому любая помощь будет оценена.
У меня есть контроллер, и в нем я устанавливаю строковую переменную. Теперь я не возражаю, если это принимает форму свойства, ActionResult или прямой метод. Я просто хочу простую строку, с которой я могу играть в контроллере, и вернуть ее в представление.
По сути, я пытаюсь перечислить файлы в данной папке. Итак, моя логика такова:
- Найти текущую папку (частично успешно)
-
Добавьте путь к тому, где находятся файлы, которые вы хотите найти. т.е. если моя текущая папка - это Web \, то я добавлю что-то вроде "Content\CSS", если я хотел бы, например, перечислить все файлы CSS. (Я делаю это, потому что я хочу разрешить пользователю динамически изменять сайт, выбирая css для применения). Таким образом, это будет выглядеть так:
CurrentPath + = "Content\CSS"
-
Я хочу загрузить имена файлов в массив или список
- Я хочу передать этот список моему представлению для рендеринга в поле со списком (которое находится на моем _Layout.cshtml).
Важно знать, что я пытаюсь просмотреть строку в _Layout.cshtml, поскольку я не могу просто создать для нее другое представление. (Если я ошибаюсь, в этом случае я бы воспользовался какой-либо помощью).
В настоящий момент я все еще работаю над тем, чтобы простая строка передавалась на мой взгляд таким образом, что я могу свободно манипулировать им, как на шаге 2.
Я начал с отдельного статического класса и глобальной переменной:
public static class MyTheme
{
public static string CurrentPath = HostingEnvironment.MapPath("~");
}
На мой взгляд, у меня было: @Html.Label(MyProject.Web.Controllers.MyTheme.CurrentPath);
Это сработало, но когда я попытался использовать оператор if, чтобы определить, была ли строка пустой или пустой, я получил ошибки. Таким образом, мои следующие попытки не удались.
Затем я решил привести его в контроллер (в данном случае мой BaseController), и это когда я начал сталкиваться с проблемами. Код ниже:
Внутри класса BaseController
public ActionResult ThemePath()
{
string currentPath = Server.MapPath("~");
if (string.IsNullOrEmpty(currentPath))
{
currentPath = "Error!";
}
else
{
currentPath = "Our Path Is: " + currentPath;
}
return View(currentPath);
}
Я не знаю, как получить доступ и запустить его из моего представления _Layout.cshtml
Итак, я попробовал стандартный метод внутри BaseController:
public string ThemePath()
{
string currentPath = Server.MapPath("~");
if (string.IsNullOrEmpty(currentPath))
{
currentPath = "Error!";
}
else
{
currentPath = "Our Path Is: " + currentPath;
}
return currentPath;
}
Снова я не знаю, как получить к нему доступ в представлении
Наконец, я попытался использовать ViewBag и ViewData, и теперь я просто собираюсь запугивать! Поэтому в моем базовом контроллере у меня есть:
public string ThemePath()
{
ViewBag.currentPath = Server.MapPath("~");
if (string.IsNullOrEmpty(ViewBag.currentPath))
{
ViewBag.currentPath = "Error!";
}
else
{
ViewBag.currentPath = "Our Path Is: " + ViewBag.currentPath;
}
return ViewBag.currentPath;
}
и, на мой взгляд, у меня
@Html.Label(ViewBag.CurrentPath);
или даже
@Html.Label(ViewBag.CurrentPath.ToString());
Со следующими дружественными сообщениями об ошибке:
CS1973: "System.Web.Mvc.HtmlHelper" не имеет применимого метода с именем "Label", но по этому имени имеет метод расширения. Методы расширения не могут динамически отправляться. Подумайте о том, как использовать динамические аргументы или вызывать метод расширения без синтаксиса метода расширения.
Наконец, я попробовал ViewData в базе следующим образом: public string ThemePath() { ViewData [ "currentPath" ] = Server.MapPath( "~" );
if (string.IsNullOrEmpty(ViewData["currentPath)"].ToString()))
{
ViewData["currentPath"] = "Error!";
}
else
{
ViewData["currentPath"] = "Our Path Is: " + ViewData["currentPath"];
}
return ViewData["currentPath"].ToString();
}
и соответственно в _Layout.cshtml я пробовал:
@Html.Label(ViewData["CurrentPath"].ToString());
Без .ToString() я получаю вышеуказанную ошибку:
С .ToString() я получаю ошибку с ошибкой null refrence.
Итак, я сейчас потерялся и не знаю, где я ошибаюсь. Заранее благодарим за любую помощь.