是否可以在 .cshtml Razor 文件中访问我的项目属性?我需要这样的东西:
@if (myProject.Properties.Settings.Default.foo) {...}
而 foo 是boolean
我收到错误消息,由于安全原因,这是不可能的。
是否可以在 .cshtml Razor 文件中访问我的项目属性?我需要这样的东西:
@if (myProject.Properties.Settings.Default.foo) {...}
而 foo 是boolean
我收到错误消息,由于安全原因,这是不可能的。
您不应该ConfigurationManager
直接从您的视图中调用。视图在 MVC 中应该是“愚蠢的”,即不了解数据结构或后端,并且通过ConfigurationManager
直接调用您的视图非常了解您的设置是如何存储的。如果您更改设置以使用不同的存储(即数据库),那么您必须更改您的视图。
因此,您应该在其他地方获取该值并将其传递给您的视图,以便您的视图只负责渲染它,仅此而已。您可能有 2 个选项:
我不鼓励选项 1,因为通常最好避免,ViewBag
因为它不是强类型(在 MVC 中使用 ViewBag 不好吗?)。此外,要做到这一点,您要么必须从BaseController
每个控制器继承一个可能很痛苦的控制器,要么创建一个全局操作过滤器来覆盖ActionExecuted
并填充ViewBag
其中的某些内容。
选项 2 可能更好。我会创建一个通用控制器,例如:
public class CommonController : Controller
{
[ChildActionOnly]
public ViewResult Settings()
{
// Get some config settings etc here and make a view model
var model = new SettingsModel { Foo = myProject.Properties.Settings.Default.foo };
return View(model);
}
}
然后在您的布局文件中,您可以调用:
@Html.Action("Settings", new { controller = "Common" })
它呈现一个强类型的局部视图(~/Views/Common/Settings.cshtml),如下所示:
@model YourProject.Models.SettingsModel
@if(Model.Foo)
{
// So something
}
这样你仍然使用强类型模型和视图,你的布局视图保持干净和简单,你的局部视图保持“哑”
应用程序设置存储在 web.config 文件中
<applicationSettings>
<YourProject.Properties.Settings>
<setting name="Setting" serializeAs="String">
<value>asdqwe</value>
</setting>
所以你可以尝试使用 ConfigurationManager.AppSettings 字典
ConfigurationManager.AppSettings["Setting"]