是否可以在.cshtml Razor文件中访问我的项目属性? 我需要这样的东西:
@if (myProject.Properties.Settings.Default.foo) {...}
而foo是boolean
我收到错误,由于安全原因,这是不可能的。
答案 0 :(得分:10)
您不应该直接从您的视图中调用ConfigurationManager
。视图在MVC中应该是“哑”,即不了解数据结构或后端,并且通过直接调用ConfigurationManager
,您的视图对于如何存储设置了解得太多。如果您将设置更改为使用其他商店(即数据库),则必须更改视图。
因此,您应该在其他地方获取该值并将其传递给您的视图,以便您的视图可以处理渲染,就是这样。您可能有两个选择:
我不鼓励选项1,因为通常最好避免使用ViewBag
,因为它不是强类型(Is using ViewBag in MVC bad?)。另外,要做到这一点,你要么必须为每个可能很痛苦的控制器继承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
}
这样你仍然使用强类型模型和视图,你的布局视图保持干净简洁,你的局部视图仍然“哑”
答案 1 :(得分:0)
应用程序设置存储在web.config文件中
<applicationSettings>
<YourProject.Properties.Settings>
<setting name="Setting" serializeAs="String">
<value>asdqwe</value>
</setting>
因此您可以尝试使用ConfigurationManager.AppSettings字典,如
ConfigurationManager.AppSettings["Setting"]