在 MVC Razor 中在 C# 和 Javascript 之间共享常量 [英] Share constants between C# and Javascript in MVC Razor

查看:22
本文介绍了在 MVC Razor 中在 C# 和 Javascript 之间共享常量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'd like to use string constants on both sides, in C# on server and in Javascript on client. I encapsulate my constants in C# class

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

我找到了一种使用 Razor 语法在 Javascript 中使用这些常量的方法,但我觉得这很奇怪:

I found a way to use these constants in Javascript using Razor syntax, but it looks weird to me:

@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 之间有没有更优雅"的共享常量的方式?(或者至少更自动,所以我不必在两个文件中进行更改)

Is there any more "elegant" way of sharing constants between C# and Javascript? (Or at least more automatic, so I do not have to make changes in two files)

推荐答案

您使用它的方式很危险.想象一下,您的某些常量包含引号,或者更糟的是其他一些危险字符 => 会破坏您的 javascript.

The way you are using it is dangerous. Imagine some of your constants contained a quote, or even worse some other dangerous characters => that would break your javascripts.

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

I would recommend you writing a controller action which will serve all constants as 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 + ";");
}

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

and then in your layout reference this script:

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

现在,只要您需要在脚本中使用常量,只需按名称使用它:

Now whenever you need a constant in your scripts simply use it by name:

<script type="text/javascript">
    alert(constants.T_URL);
</script>

这篇关于在 MVC Razor 中在 C# 和 Javascript 之间共享常量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆