JavaScript代码块中的Razor语法

时间:2012-07-05 08:23:10

标签: javascript html asp.net-mvc-3 razor

我想知道在JavaScript代码中使用razor是否是一个好习惯。例如:

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

或者最好创建隐藏值,然后使用JavaScript,就像这样?

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

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

编辑:

@{
var formVariables = serializer.Serialize(new
                                             {
                                                 id = Model.Id, 
                                                 name = Model.Name, 
                                                 age = Model.Age
                                             });

<input type="hidden" id="header_variables" value="@formVariables"/>
<script type="text/javascript" src = "/Scipts/..."></script>
}

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

3 个答案:

答案 0 :(得分:3)

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

有多种方法可以在输入上使用html5属性(即data-attribute ='foo'),这样您就可以使用可以在外部.js内部解析的属性来“装饰”您的输入。文件。

一个非常简短的例子:

在您看来

<input type='text' id='myId' data-action='@Url.Action("MyAction")' class='myClass' />
<。>在.js文件中:

var targetAction = $('#myId').attr('data-action');

这使得.js和视图之间完全分离。它当然需要一定程度的规划。

希望这有帮助

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我认为这个问题没有正确答案;唯一的利弊。

在Javascript中使用Razor的优点

  • 脚本绑定到您的视图模型;所以模型更改会自动获取,错误将在编译时被捕获。

缺点

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