gpt4 book ai didi

asp.net - 如何访问 .cshtml Razor 文件中的项目属性?

转载 作者:行者123 更新时间:2023-12-04 06:40:46 25 4
gpt4 key购买 nike

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

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

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

最佳答案

你不应该调用 ConfigurationManager直接从你的角度来看。在 MVC 中, View 应该是“愚蠢的”,即不了解数据结构或后端,并通过调用 ConfigurationManager直接您的 View 非常了解您的设置是如何存储的。如果您更改设置以使用不同的存储(即数据库),那么您必须更改您的 View 。

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

  • 在 ViewBag 中添加一些东西并在 View 中抓取它
  • 从将强类型 ViewModel 传递到局部 View 的通用 Controller 中渲染一个 Action 。

  • 我不鼓励选项 1,因为通常最好避免使用 ViewBag因为它不是强类型( Is using ViewBag in MVC bad? )。此外,要做到这一点,您要么必须从 BaseController 继承。对于每个可能很痛苦的 Controller ,或者创建一个覆盖 ActionExecuted 的全局操作过滤器并在 ViewBag 中添加一些东西那里。

    选项 2 可能更好。我会创建一个通用 Controller ,例如:
    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" })

    它呈现一个强类型的局部 View (~/Views/Common/Settings.cshtml),如下所示:
    @model YourProject.Models.SettingsModel

    @if(Model.Foo)
    {
    // So something
    }

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

    关于asp.net - 如何访问 .cshtml Razor 文件中的项目属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16034728/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com