我正在尝试生成一个折叠面板的视图。我需要每个面板都有一个唯一的ID。我已成功完成以下代码。但在另一篇文章中警告说使用@ Html.Raw()是不好的做法。 我的替代方案是什么?
@Html.Raw("<div id=\"collapse")@Html.DisplayFor(modelitem => item.NAME)@Html.Raw("\" class=\"panel-collapse collapse collapse\" role=\"tabpanel\" aria-labelledby=\"heading")@Html.DisplayFor(modelitem => item.NAME)@Html.Raw("\">")
答案 0 :(得分:4)
您需要了解为什么 Html.Raw
是一种所谓的“不良做法”。&#34;如果它普遍不好而且永远不应该被使用那么它就不会被创造出来。当它被用于将非消毒内容写入浏览器时会很糟糕,因为它使您容易受到XSS攻击。
有了这样的理解,我们可以查看您正在做的事情,并看到您在调用Html.Raw
时没有写出任何用户提供的数据,因此在这种情况下,它可能是可接受的用途
话虽如此,看起来你可以通过传递div
的集合在模型中创建并简单地循环它们来简化事情,如下所示,这可能需要一些调整才能得到它右。
@foreach(var panelName in model.PanelNames)
{
<div id="collapse@panelName
class="panel-collapse collapse collapse"
role="tabpanel"
aria-labelledby="heading@panelName">
}
答案 1 :(得分:2)
您可以通过组合文本,标记和剃刀代码来简化代码。 在您的情况下,使用带内联Razor表达式的HTML:
<div id="@("collapse" + Html.DisplayFor(modelitem => item.NAME))" class="panel-collapse collapse collapse" role="tabpanel" aria-labelledby="@("heading" + Html.DisplayFor(modelitem => item.NAME))"></div>
关于Razor语法的