是有可能的.cshtml剃刀文件内访问我的项目属性? 我需要的是这样的:
@if (myProject.Properties.Settings.Default.foo) {...}
而foo是一个boolean
我得到的是,由于安全原因,这是不可能的错误。
是有可能的.cshtml剃刀文件内访问我的项目属性? 我需要的是这样的:
@if (myProject.Properties.Settings.Default.foo) {...}
而foo是一个boolean
我得到的是,由于安全原因,这是不可能的错误。
你真不该叫ConfigurationManager
直接从您的视图。 意见应在MVC“哑巴”,即不具有数据结构的任何知识或后端,并通过调用ConfigurationManager
直接您认为知道太多关于如何保存你的设置。 如果你改变了你的设置,使用不同的存储(即数据库),那么你就必须改变你的看法。
所以,你应该在其他地方抢值,并将其传递到您的视图,以便您的观点只是需要使其照顾,仅此而已。 你可能有2种选择:
我会劝阻选项1,因为一般来说这是好事,避免ViewBag
,因为它不是强类型( 是否使用ViewBag在MVC不好? )。 此外,要做到这一点,你想要么必须从继承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" })
这使得一个强类型的局部视图(〜/查看/通用/ 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"]