JavaScript代码块中的Razor语法

JavaScript代码块中的Razor语法,javascript,html,asp.net-mvc-3,razor,Javascript,Html,Asp.net Mvc 3,Razor,我想知道在JavaScript代码中使用razor是否是一种好的实践。例如: <script type="text/javascript"> var variable = @some.Id </script> var variable=@some.Id 或者最好创建隐藏的值,然后使用JavaScript,就像这样 <input type="hidden" id="someId" value"@some.Id" /> <script type

我想知道在JavaScript代码中使用razor是否是一种好的实践。例如:

<script type="text/javascript">
   var variable = @some.Id
</script>

var variable=@some.Id
或者最好创建隐藏的值,然后使用JavaScript,就像这样

<input type="hidden" id="someId" value"@some.Id" />

<script type="text/javascript">
   var variable = $('#someId').val();
</script>

var变量=$('#someId').val();
编辑:

@{
var formVariables=serializer.Serialize(新
{
id=Model.id,
name=Model.name,
年龄=模特。年龄
});
}

这是一个好的解决方案吗?

Razor将在服务器端进行解析,并由相关输出替换。因此,在我看来,这是完全无关紧要的,如果你把它放在Javascript或HTML中——在客户端,只有输出值是可见的。因此,在上面的示例中,我会选择第一个选项(将其直接放在JS中),因为您不会有不必要的隐藏输入字段。

我认为这个问题没有正确的答案;只有优点和缺点

在Javascript中使用Razor的优点

  • 脚本已绑定到视图模型;因此,模型更改将自动获取,错误将在编译时捕获
缺点

  • 脚本与标记混合在一起,这与web设计最佳实践相反(将脚本放在底部,这样它就永远不会破坏页面)
  • 无法编译/缩小脚本,因为它与标记混合在一起

我个人会使用第二个选项的扩展名,创建一个单独的.js文件。原因是,如果您将工作委托给第三方来处理UI的jquery/javascript部分,那么他们就不需要看到任何后端功能

有多种方法可以在输入上使用html5属性(即data attribute='foo'),这将允许您使用可以在external.js文件中解析的大量属性来“装饰”输入

一个非常简单的例子:

在你看来:

<input type='text' id='myId' data-action='@Url.Action("MyAction")' class='myClass' />
这使得.js和视图之间完全分离。当然,这需要一定程度的计划


希望这有帮助

我担心的是干净的代码。例如,如果我想将javascript放在单独的.js文件中,那么,它当然不会这样工作,您必须使用隐藏字段。您建议我采用哪种方式?你认为,哪种方式更适合你的工作opinion@karaxuna我倾向于同意Trogvar的观点;除非您正在为移动设备构建网站,并且正在使用大量脚本。@karaxuna,否则我可能倾向于使用外部.JS文件。我看到吉姆·托兰提出了一些更好的观点,可以添加到我上面的优点列表中。谢谢@dbaseman。现在我想到了不同的解决方案。请看编辑
<input type='text' id='myId' data-action='@Url.Action("MyAction")' class='myClass' />
var targetAction = $('#myId').attr('data-action');