如何访问项目属性在.cshtml剃刀文件?(how to access the project pr

2019-08-31 07:16发布

是有可能的.cshtml剃刀文件内访问我的项目属性? 我需要的是这样的:

@if (myProject.Properties.Settings.Default.foo) {...}

而foo是一个boolean

我得到的是,由于安全原因,这是不可能的错误。

Answer 1:

你真不该叫ConfigurationManager直接从您的视图。 意见应在MVC“哑巴”,即不具有数据结构的任何知识或后端,并通过调用ConfigurationManager直接您认为知道太多关于如何保存你的设置。 如果你改变了你的设置,使用不同的存储(即数据库),那么你就必须改变你的看法。

所以,你应该在其他地方抢值,并将其传递到您的视图,以便您的观点只是需要使其照顾,仅此而已。 你可能有2种选择:

  1. 添加的东西到ViewBag并抓住它在视图
  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
}

你还在使用强类型模型和视图这样一来,你的布局视图保持清洁,简单,你的部分观点仍然是“哑巴”



Answer 2:

该应用程序设置存储在web.config文件

<applicationSettings>
 <YourProject.Properties.Settings>
  <setting name="Setting" serializeAs="String">
    <value>asdqwe</value>
  </setting>

所以你可以尝试使用ConfigurationManager.AppSettings字典一样

ConfigurationManager.AppSettings["Setting"]


文章来源: how to access the project properties in a .cshtml razor file?