【问题标题】:how to access the project properties in a .cshtml razor file?如何访问 .cshtml 剃须刀文件中的项目属性?
【发布时间】:2013-04-16 19:55:49
【问题描述】:

是否可以在 .cshtml Razor 文件中访问我的项目属性? 我需要这样的东西:

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

而 foo 是 boolean

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

【问题讨论】:

  • 如何在 ViewBag(在控制器中)中设置该属性并从那里调用它?
  • 好主意,会试试的
  • 但问题是,这是我的 _Layout 页面,我在哪里有 Viewbag 呢?我不会在我拥有的每个控制器中都设置它
  • 使用 BaseController 并将其设置在那里,或者,正如 lavrik 所说,使用 web.config 进行设置并从那里参考 :)

标签: asp.net asp.net-mvc razor


【解决方案1】:

您不应该直接从您的视图中调用ConfigurationManager。视图在 MVC 中应该是“愚蠢的”,即不了解数据结构或后端,并且通过直接调用ConfigurationManager,您的视图对您的设置是如何存储的了解太多。如果您更改设置以使用不同的存储(即数据库),那么您必须更改视图。

因此,您应该在其他地方获取该值并将其传递给您的视图,以便您的视图只负责渲染它,仅此而已。您可能有 2 个选择:

  1. 在 ViewBag 中添加一些东西并在视图中抓取它
  2. 从将强类型 ViewModel 传递到分部视图的通用控制器呈现操作。

我不鼓励选项 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
}

这样你仍然使用强类型模型和视图,你的布局视图保持干净和简单,你的局部视图仍然是“哑巴”

【讨论】:

  • 如果 _Layout 视图中需要这个怎么办?
  • 这仍然有效 - 只需从您的布局视图中调用该操作,它将被包含在内
【解决方案2】:

应用设置存储在 web.config 文件中

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

所以您可以尝试使用 ConfigurationManager.AppSettings 字典,如

ConfigurationManager.AppSettings["Setting"]

【讨论】:

  • 然后我收到“ConfigurationManager”在此上下文中不可用的错误
  • 您应该阅读控制器中的配置管理器,因为它不是布局页面的工作。布局页面的唯一目的是呈现给它的值。提供值以供查看是控制器的责任。
  • 检查this。并且 ConfigurationManager 应该在视图上可用。
  • 在页面(.cshtml)中使用@using System.Configuration.ConfigurationManager
猜你喜欢
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多