如何在.NET Core的cshtml页面中将Model数据渲染到HTML表格?
错误原因
- Razor语法对C#代码和HTML标记的混写有严格的上下文区分:你将
<tr>标签写在@{ }代码块内部后,后续的string[] values = line[i].Split(',');会被Razor识别为HTML文本内容,不会作为C#代码执行,因此触发values不存在的报错 line[i]写法错误:foreach循环中迭代得到的line本身就是单条文本行,不需要下标访问- 末尾的表格标签没有正确闭合,应该写
</table>而非<table>,触发标签解析异常
正确实现方案
1. 视图代码(Index.cshtml)
假设你从控制器传入的Model是IEnumerable<string>类型,对应文本文件的每一行内容:
<table id="empTable"> <tr> <th>Name</th> <th>Age</th> <th>Salary</th> </tr> @foreach (string line in Model) { <tr> @{ // 此处单独包裹C#代码块,Razor会正确解析 string[] values = line.Split(','); foreach (var val in values) { <td>@val.Trim()</td> } } </tr> } </table>
2. 控制器传值代码(示例)
你可以在控制器中读取文本文件内容,作为Model传给视图:
using Microsoft.AspNetCore.Mvc; using System.IO; public class HomeController : Controller { public IActionResult Index() { // 示例路径:将employees.txt放到项目wwwroot目录下 var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "employees.txt"); var allLines = File.ReadAllLines(filePath); return View(allLines); } }
其他补充
- 如果需要用到
StringBuilder、File等类,只需要在视图顶部加@using System.Text、@using System.IO即可引用对应命名空间;也可以直接在项目的Views/_ViewImports.cshtml文件中添加全局引用,所有视图都可以直接使用对应类,不需要重复加using语句。 - 不需要走JS动态生成表格的方案,直接用Razor原生语法渲染即可满足需求。
内容的提问来源于stack exchange,提问作者Rachel Nguyen
相关产品推荐
相关产品推荐

