是否可以在.cshtml Razor文件中访问我的项目属性? 我需要的是这样的:如何访问.cshtml razor文件中的项目属性?
@if (myProject.Properties.Settings.Default.foo) {...}
而foo是一个boolean
我得到的是,由于安全原因,这是不可能的错误。
是否可以在.cshtml Razor文件中访问我的项目属性? 我需要的是这样的:如何访问.cshtml razor文件中的项目属性?
@if (myProject.Properties.Settings.Default.foo) {...}
而foo是一个boolean
我得到的是,由于安全原因,这是不可能的错误。
你真的不应该被直接调用ConfigurationManager
你的看法。在MVC中,视图应该是'愚蠢的',即不具备数据结构或后端的任何知识,并且通过直接调用ConfigurationManager
您的视图太了解您的设置存储方式。如果您将设置更改为使用其他商店(即数据库),那么您必须更改视图。
因此,您应该在别处获取该值并将其传递给您的视图,以便您的视图只需处理它就可以了。你可能有2种选择:
我会阻止选项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" })
这使得一个强类型的局部视图(〜/查看/通用/设置。 CSHTML),它看起来像:
@model YourProject.Models.SettingsModel
@if(Model.Foo)
{
// So something
}
这样,你仍然在使用强类型模型和视图,布局视图保持清洁,简单,你的部分观点仍然是“哑巴”
如果在_Layout视图中需要这么做,该怎么办? –
这仍然有效 - 只需从布局视图中调用动作即可 –
的应用程序设置存储在web.config文件中
<applicationSettings>
<YourProject.Properties.Settings>
<setting name="Setting" serializeAs="String">
<value>asdqwe</value>
</setting>
所以你可以尝试使用ConfigurationManager.AppSettings字典一样
ConfigurationManager.AppSettings["Setting"]
如何在ViewBag(在Controller中)设置该属性并从那里调用它? –
好主意,会尝试 – gurehbgui
但问题是,这是我的_Layout页面,我在哪里有Viewbag呢?我不会将它设置在我拥有的每个控制器中。 – gurehbgui