Razor HTML条件输出
我有一个要输出为main内容的项目列表(下面不包括main)。每个项目有3个属性:节名称、标签和值。每个项目都包含在a中,每次节名更改时,我都必须打开a(并关闭上一个,如果有)。我将Razor视图用于以下代码:Razor HTML条件输出,razor,Razor,我有一个要输出为main内容的项目列表(下面不包括main)。每个项目有3个属性:节名称、标签和值。每个项目都包含在a中,每次节名更改时,我都必须打开a(并关闭上一个,如果有)。我将Razor视图用于以下代码: @foreach (LocalStorageItem lsi in Model) { string fld_name = "f_" + lsi.ItemName; if (lsi.SectionName != sn) { if (sn != "") {
@foreach (LocalStorageItem lsi in Model) {
string fld_name = "f_" + lsi.ItemName;
if (lsi.SectionName != sn) {
if (sn != "") {
Html.Raw("</fieldset>");
}
sn = lsi.SectionName;
<h2>@sn</h2>
Html.Raw("<fieldset>");
}
<div class="row">
<div class="ls_label">@lsi.ItemName</div>
<div class="ls_content" name="@fld_name" id="@fld_name">.</div>
</div>
}
@if (Model.Count != 0) {
Html.Raw("</fieldset>");
}
@foreach(模型中的LocalStorageItem lsi){
字符串fld_name=“f_”+lsi.ItemName;
if(lsi.SectionName!=sn){
如果(sn!=“”){
Html.Raw(“”);
}
sn=lsi.SectionName;
@锡
Html.Raw(“”);
}
@lsi.ItemName
.
}
@如果(Model.Count!=0){
Html.Raw(“”);
}
问题是:每次节名更改时,都不会生成字段集标记(打开和/或关闭)。我错在哪里?如果我不使用Html.Raw(或者@:作为替代),VS2010解析器将发出错误信号。调用
Html.Raw
返回IHtmlString
;它不会在页面上写任何东西
相反,你应该写作
@:</fieldset>
@:
使用@:
强制Razor将其视为纯文本,因此不需要格式良好
但是,通过调用
GroupBy
并创建嵌套的foreach
循环,您的代码可以变得更干净。我真的认为使用@:
来处理此类代码是对转义序列的滥用。相反,应该通过正确重构代码来解决此问题,以便可以轻松编写平衡的标记:
@foreach(var section in Model.GroupBy(i => i.SectionName)) {
<h2>@section.Key</h2>
<fieldset>
@foreach(LocalStorageItem lsi in section) {
string fld_name = "f_" + lsi.ItemName;
<div class="row">
<div class="ls_label">@lsi.ItemName</div>
<div class="ls_content" name="@fld_name" id="@fld_name">.</div>
</div>
}
</fieldset>
}
@foreach(Model.GroupBy中的var节(i=>i.SectionName)){
@节.键
@foreach(第节中的LocalStorageItem lsi){
字符串fld_name=“f_”+lsi.ItemName;
@lsi.ItemName
.
}
}
12行代码而不是18行谢谢您的建议。只有一件事:标签应该放在标签前面,以获得相同的结果。关于
h2
标签,您是对的。这是一个复制粘贴错误。