【问题标题】:Using global C# variables in Typescript在 Typescript 中使用全局 C# 变量
【发布时间】:2019-04-28 13:50:15
【问题描述】:

在 Razor/cshtml 文件中编写 Javascript 代码时,可以编写如下代码:

if (lSelectedID == "@(Globals.MyGlobalVariable)") {
...
}

其中 Globals.MyGlobalVariable 是 C# 变量。 如果 Globals.MyGlobalVariable==123,那么客户端上生成的 Javascript 将是

if (lSelectedID == "123") {
...
}

上面的很方便。但是如何在 Typescript 中做同样的事情呢? IE。如何在 typescript 文件转换为 Javascript 之前将 C# 全局变量(或 C# 函数调用的结果或其他)插入 typescript?

【问题讨论】:

    标签: c# visual-studio typescript razor


    【解决方案1】:

    将 JavaScript 和 CSS 直接包含到您的 CSTHML 中并不是最佳做法。相反,您应该将它们放在自己的文件中并在您的视图中引用它们。

    如果你的 JavaScript 需要来自 C# 的一些值,那么你应该在 HTML 元素中使用 data 属性来存储它。

    例子:

    <span id="myGlobalVariable" data-value="123456">MyGlobalVariable</span>
    

    然后在您的 TypeScript 中获取您在视图中设置的数据

    let myGlobalVariable = document.getElementById("myGlobalVariable").dataset.value;
    if (lSelectedID == myGlobalVariable) {
    
    }
    

    【讨论】:

      【解决方案2】:

      我认为这里最简单的做法是在客户端的 Typescript 中复制全局变量。这就是我最近两个项目的做法。

      所以在服务器端你会有:

      // C#
      
      public class Globals()
      {
          public int GlobalNum {get;} = 0;
          public string GlobalString {get;} = "123";
      }
      

      在客户端,在 Typescript 中它会是:

      // Typescript 
      
      export enum Globals{
          GlobalNum = 0;
          GlobalString = "123";
      }
      

      现在您可以忘记尝试将 Razor(在服务器端呈现)连接到您的 Typescript(在客户端执行)的困难,同时仍然有一组清晰明了的全局变量可供参考。

      然后你的代码可以变成:

      // Typescript
      
      if (lSelectedID == Globals.GlobalString) {
         //...
      }
      

      您唯一需要记住的是,您的全局变量存在于两个地方 - 一个在服务器端,一个在客户端。

      Typescript 要求您无论如何都在客户端复制大量服务器端类,以便正确接收获取响应数据,例如,添加 Globals 类/枚举不应过多打破常规。

      【讨论】:

      • 感谢 cmets。重复的全局变量不是我的最爱,遗憾的是我迟早会忘记更新其中一个。使用 html 变量可以避免这个问题,但我尽量不使用更多必要的隐藏 html 变量。我想我宁愿在我的 Typescript 函数中包含一个附加参数,并将这个参数包含在我调用 Typescript 函数的小部件事件处理程序中。习惯 Razor 时似乎有点不必要,但足够公平......
      • 如果微软可以在 Visual Studio 中提供某种类型的 C# 控制值注入到 Typescript 中,就像在 Razor 中一样。
      猜你喜欢
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多