在 MVC Razor 中在 C# 和 Javascript 之间共享常量 [英] Share constants between C# and Javascript in MVC Razor
问题描述
我想在两端都使用字符串常量,在服务器端的 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屋!