我知道这看起来很基本,而且应该是,但我不知道我哪里出错了。(我已经阅读了其他类似标题的文章,以及网络上的其他资源,但仍然无法弄清楚),所以任何帮助将不胜感激。
我有一个控制器,我在其中设置了一个字符串变量。现在我不介意这是否采用属性、ActionResult 或直接方法的形式。我只想要一个可以在控制器中使用的简单字符串,并将其返回给视图。
基本上我要做的是列出给定文件夹中的文件。所以我的逻辑是这样的:
- 找到当前文件夹(部分成功)
将路径附加到您要定位的文件所在的位置。即,如果我当前的文件夹是 Web\,那么如果我想列出所有 CSS 文件,我将附加类似“Content\CSS”的内容。(我这样做是因为我希望允许用户通过选择要应用的 css 来动态更改站点)。所以它看起来像:
CurrentPath += "内容\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() 我得到一个空引用执行错误。
所以我现在有点迷路了,真的不知道我哪里出错了。提前感谢您的帮助。