为什么在同一<text> </text>元素内@ID变量呈现的方式不同

时间:2019-07-31 12:35:07

标签: javascript c# asp.net-mvc-4 razor

我正在尝试自动生成一些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(); })
...

2 个答案:

答案 0 :(得分:0)

如果剃须刀引擎在字母数字字符后加@ID,则它似乎是字符串的一部分。如果在连字符正确起作用之前添加了连字符:#toggle-off-@ID-label。您可以用括号将ID括起来以得到预期的输出:

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

答案 1 :(得分:0)

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>