首页 > 解决方案 > 为什么@ID变量在同一内部以不同的方式呈现元素

问题描述

我正在尝试自动生成一些 javascript,我的数据模型中的每一行都有一行,这需要将每行上的 ID 值插入到 javascript 中。

这是 HTML 页面上 script 元素内的代码:

    <script>
        $(function () {
@foreach (var item in Model) {
    var ID = item.QuestionID;
    <text>$('#toggle-off@ID-label').click(function() { $('#Question-Answer-@ID').show(); })</text>
}
        });
    </script>

输出是:

    <script>
        $(function () {
    $('#toggle-off@ID-label').click(function() { $('#Question-Answer-1').show(); })
    $('#toggle-off@ID-label').click(function() { $('#Question-Answer-2').show(); })
    $('#toggle-off@ID-label').click(function() { $('#Question-Answer-3').show(); })
...

当我期望它是:

    <script>
        $(function () {
    $('#toggle-off1-label').click(function() { $('#Question-Answer-1').show(); })
    $('#toggle-off2-label').click(function() { $('#Question-Answer-2').show(); })
    $('#toggle-off3-label').click(function() { $('#Question-Answer-3').show(); })
...

标签: javascriptc#asp.net-mvc-4razor

解决方案


Razor 标记解析器不是那么聪明,它被认为off@ID是单个标记,因此不应该替换它。

您应该可以通过以下方式解决它:

    <script>
        $(function () {
@foreach (var item in Model) {
    var ID = item.QuestionID;
    var toggle = string.format("#toggle-off{0}-label", ID);
    <text>$('@toggle').click(function() { $('#Question-Answer-@ID').show(); })</text>
}
        });
    </script>

推荐阅读