【问题标题】:Set global variable at compile time from cshtml page在编译时从 cshtml 页面设置全局变量
【发布时间】:2013-05-07 23:39:38
【问题描述】:

在使用 webmatrix(剃须刀模板,c# 代码)创建的 ASP.NET 网页“站点”中。

我可以在不执行该页面的情况下在 cshtml 模板中设置一个“全局”(AppState) 变量吗?

我知道我可以在页面上设置“AppState.Whatever =”,但我必须'访问'页面,以便代码'运行'。

我可以在 te cshtml 模板中设置“Something.Whatever =”,而无需访问模板。 这只有在这些页面在保存时被“编译”或解释时才有可能。 这样的事情可能吗?

谢谢!

【问题讨论】:

标签: c# razor asp.net-webpages


【解决方案1】:

您可以将名为 _AppStart.cshtml 的文件添加到您网站的根目录。它将在您的应用程序发出第一个请求时执行。您可以在其中设置全局变量。

在我的文章中查找标题为应用程序变量的部分:http://www.mikesdotnetting.com/Article/192/Transferring-Data-Between-ASP.NET-Web-Pages

【讨论】:

  • 用例如下:当我向我的网站添加新页面 (cshtml) 时。我想将此页面自动添加到我的“菜单”中,而无需编辑任何其他页面,然后是新的 cshtml 页面。只需添加一个页面,它就会显示在菜单中而不会被“执行”。那么如何在不编辑 _Appstart.chtml 的情况下做到这一点呢?
  • 一百万年后,我永远不会从您的问题中猜到您要做什么。您可以编写一些代码来列出站点中的文件并根据结果生成菜单。如果您添加一个页面,它将自动被代码拾取。
  • 所以没有可能的方法可以工作吗?除了 Directory.GetFiles?
  • 您无法做到这一点,我认为这不依赖于某种文件观察器 - 除非您的菜单是数据库驱动的,在这种情况下您当然可以更新包含新添加文件详细信息的数据库。
【解决方案2】:

您不能将变量设置为 _AppStart.cshtml 的全局变量。它不会将变量编译到所有页面。您可以尝试在 _AppStart.cshtml 中添加以下内容,但它只能向您的 cshtml 站点的所有页面添加或编译整数。

App.MyInt = 0;

但是您可以将名为 Global.cs 的文件添加到 App_Code 文件夹中

using System;
using System.Collections.Generic;
using System.Web;

/// <summary>
/// This class specifies global variables
/// </summary>
public static class Global
{
    public const string StringName = "Some String";
    public const int IntName = 100;
    // Or anything else you want to add
}

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2011-05-06
    • 2019-07-18
    相关资源
    最近更新 更多