使用Razor遍历ICollection展示作者姓名的语法疑问
正确的Razor foreach循环展示作者列表实现方式
没问题,我来帮你搞定这个Razor的循环写法,先从基础结构和代码示例说起:
首先先确认你的类结构(我假设你的类定义大概是这样,如果实际属性名有差异,对应调整即可):
// 作者实体类 public class Author { public string FirstName { get; set; } public string LastName { get; set; } } // 包含多个作者的类 public class MyClass { // 存储作者列表的属性,推荐用List<T>或ICollection<T>类型 public List<Author> Authors { get; set; } = new List<Author>(); }
接下来在你的Razor视图(.cshtml)文件里,假设页面的Model是MyClass类型(即你已经把MyClass的实例传递给了视图),正确的foreach循环写法如下:
基础实现(带空值检查)
@model MyClass <h3>作者列表</h3> <!-- 先做空值判断,避免空引用异常 --> @if (Model.Authors != null && Model.Authors.Any()) { <ul class="author-list"> <!-- Razor中C#循环必须加@开头 --> @foreach (var author in Model.Authors) { <li>@author.FirstName @author.LastName</li> } </ul> } else { <p>暂无作者信息</p> }
你可能踩过的常见坑
- 忘记加
@符号:Razor里识别C#代码必须用@开头,不管是@foreach循环还是变量引用@author.FirstName,漏写就会变成纯文本输出 - 没做空值检查:直接循环
Model.Authors如果它是null的话,会触发空引用异常,一定要先判断 - 代码块包裹问题:循环内部的HTML元素必须用大括号
{}包裹,否则Razor会识别语法错误
如果是Blazor组件中的写法
如果你是在Blazor组件里使用,写法类似,只是模型的获取方式可能不同(比如依赖注入或参数传递):
<!-- 假设通过注入获取MyClass实例 --> @inject MyClass MyClassInstance <h3>作者列表</h3> @if (MyClassInstance.Authors != null && MyClassInstance.Authors.Any()) { <div> @foreach (var author in MyClassInstance.Authors) { <p>@author.FirstName @author.LastName</p> } </div> } else { <p>暂无作者信息</p> }
按照这个写法,就能正确遍历并输出每个作者的FirstName和LastName啦~
内容的提问来源于stack exchange,提问作者ed Mundo
相关产品推荐
相关产品推荐

