在 MVC Razor 中的 C# 和 Javascript 之间共享常量

2024-05-21

我想在服务器上的 C# 和客户端上的 Javascript 中都使用字符串常量。 我将常量封装在 C# 类中

namespace MyModel
{
        public static class Constants
        {
            public const string T_URL = "url";
            public const string T_TEXT = "text";
     . . .
        }
}

我找到了一种使用 Razor 语法在 Javascript 中使用这些常量的方法,但它对我来说看起来很奇怪:

@using MyModel
        <script type="text/javascript">

            var T_URL = '@Constants.T_URL';  
            var T_TEXT = '@Constants.T_TEXT';
     . . .
            var selValue = $('select#idTagType').val();
            if (selValue == T_TEXT) { ... 

有没有更“优雅”的方式在 C# 和 Javascript 之间共享常量? (或者至少更加自动化,所以我不必在两个文件中进行更改)


你使用它的方式是危险的。想象一下你的一些常量包含一个引号,或者更糟糕的是一些其他危险字符 => 会破坏你的 JavaScript。

我建议您编写一个控制器操作,它将所有常量作为 javascript 提供服务:

public ActionResult Constants()
{
    var constants = typeof(Constants)
        .GetFields()
        .ToDictionary(x => x.Name, x => x.GetValue(null));
    var json = new JavaScriptSerializer().Serialize(constants);
    return JavaScript("var constants = " + json + ";");
}

然后在您的布局中引用此脚本:

<script type="text/javascript" src="@Url.Action("Constants")"></script>

现在,每当您在脚本中需要常量时,只需按名称使用它即可:

<script type="text/javascript">
    alert(constants.T_URL);
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MVC Razor 中的 C# 和 Javascript 之间共享常量 的相关文章

随机推荐