在 MVC Razor 中的 C# 和 Javascript 之间共享常量
我想在服务器上的 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 之间共享常量? (或者至少更加自动化,所以我不必在两个文件中进行更改)
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";
. . .
}
}
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) { ...
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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
你使用它的方式是危险的。想象一下您的某些常量包含引号,或者更糟糕的是其他一些危险字符 =>那会破坏你的JavaScript。
我建议您编写一个控制器操作,它将所有常量作为 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.
I would recommend you writing a controller action which will serve all constants as javascript:
and then in your layout reference this script:
Now whenever you need a constant in your scripts simply use it by name:
您可以使用 HTML 帮助程序输出必要的脚本,并使用反射来获取字段及其值,以便它自动更新。
You can use an HTML helper to output the script necessary, and use reflection to grab the fields and their values so it will automatically update.
不要将常量数据存储在 C# 类中,而是将其存储在静态配置/常量文件中。
只需将其存储为某种文件格式(json、xml、cvs 等),然后从客户端和客户端加载它即可。服务器。
这意味着您要么在运行时使用黑魔法反射在 C# 中动态创建一个类,要么只拥有一个包含键下常量的哈希表/字典。
jQuery.getJSON
,JsonReaderWriterFactor
Rather then storing your constant data in a C# class, store it in a static config/constants file.
Simply store it as some file format (json, xml, cvs, whatever) then load it up from both the client & server.
This means your either creating a class in the C# on the fly at runtime using black magic reflection or just have a hashtable / dictionary containing your constants under keys.
jQuery.getJSON
,JsonReaderWriterFactor
我的版本是从不可变的 C# 常量创建命名空间的 javascript 对象:
在 Razor 中像这样使用:
My version to create a namespaced javascript object from my C# constants that is immutable:
Used like this in Razor:
另一种选择是将常量作为
data-
值添加到调用 JavaScript 代码的按钮/链接中。您的观点:
您的脚本:
Another option is to add the constant as a
data-
value to the button/link calling the JavaScript code.Your view:
Your script: