如何在 Razor 的 foreach 中使用 HTML 和转义 Razor?

4

如何在Razor循环中构建我的HTML?我在循环内部得到了“Cannot resolve tbody”错误。

我的代码:

function loadNyhedsbrevTable() {
    var tbody = "";

    $('#NyhedsbrevTable tbody').empty();
    @foreach (string n in ViewBag.NyhedsbrevListe)
    { 
        tbody = '<tr><td>' + n + '</td></tr>';
    }
    $('#NyhedsbrevTable tbody').append(tbody);
}

我需要这样的东西吗?

<not razor> tbody = '<tr><td>' + @n + <not razor>'</td></tr>';

(注:该段代码为HTML标签,不做解释)

也许我不能使用foreach,只能使用for? - radbyx
好的,它并不是HTML,而是javascript。所以请在这里查看:https://dev59.com/Tm445IYBdhLWcg3w_PG3 对于纯HTML,没有问题... - Dmytro
2个回答

6

这也可以工作。第一次测试时可能有其他错误。 - radbyx
我会接受你的回答,因为你先回答了,并且它比我的少两行。这甚至可能是更好的实践方法,我不确定。 - radbyx

2

你不能像那样混合使用JavaScript和Razor。Razor在渲染页面时会被服务器端处理,而JavaScript是客户端脚本。

你需要做的是渲染一个有效的JavaScript代码。假设你想为循环中的每个项目附加一行,那么可以尝试使用以下代码:

function loadNyhedsbrevTable() {
    var tbody = "";

    $('#NyhedsbrevTable tbody').empty();

    @foreach (string n in ViewBag.NyhedsbrevListe)
    { 
        <text>
            tbody += '<tr><td>@(n)</td></tr>';
        </text>
    }

    $('#NyhedsbrevTable tbody').append(tbody);
}

这将导致以下渲染输出,例如:
function loadNyhedsbrevTable() {
    var tbody = "";

    $('#NyhedsbrevTable tbody').empty();

    tbody += '<tr><td>one</td></tr>';
    tbody += '<tr><td>two</td></tr>';
    tbody += '<tr><td>three</td></tr>';

    $('#NyhedsbrevTable tbody').append(tbody);
}

我正在尝试相同的操作,其中我使用<text>来切换回内容模式。目前我正在努力修复一个错误,但我认为问题不在这里。顺便说一下,在循环中我们不需要在n之前加上@吗?这样我们才能使用Razor的值。 - radbyx
@radbyx:是的,发现得很好。我已经更新了我的答案。 - musefan
好的,我现在正在测试它。 - radbyx
1
太棒了,它能正常工作!我不得不将 string 更改为 var,因为该列表是 IEnumerable<SelectListItem>,并且我必须在 n 后添加 .Text,但那是我的错误。 :) - radbyx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接