Razor技术问题:如何让ForEach循环仅输出一次<h3>标签
解决方案
因为你通过Where筛选出的所有元素name值都是相同的(筛选条件就是name == Request.Query["wine"]),所以没必要用循环重复输出,以下两种方法都能实现只生成一个<h3>标签:
方案1:直接获取第一个匹配项(推荐)
替换循环逻辑,直接取符合条件的第一个元素,避免不必要的循环:
@{ var targetWine = Model.winetype.FirstOrDefault(s => s.name == Request.Query["wine"]); } @if (targetWine != null) { <h3 class="text-uppercase font-logo text-regular letter-spacing-200">@targetWine.name</h3> }
FirstOrDefault会返回第一个匹配的元素,无匹配项时返回null,添加if判断可避免空引用错误。
方案2:保留循环但仅渲染一次
如果需要保留循环结构(比如循环内还有其他业务逻辑),可以通过标记变量控制只输出一次<h3>:
@{ bool hasRendered = false; } @foreach (var winelistObj in Model.winetype.Where(s => s.name == Request.Query["wine"])) { if (!hasRendered) { <h3 class="text-uppercase font-logo text-regular letter-spacing-200">@winelistObj.name</h3> hasRendered = true; } // 此处可保留循环内的其他业务逻辑 }
用hasRendered标记是否已输出过<h3>,第一次循环时输出并将标记设为true,后续循环不再执行输出逻辑。
内容的提问来源于stack exchange,提问作者user19761134
相关产品推荐
相关产品推荐

