【问题标题】:How to display data from Model in HTML table in .NET core (cshtml)?如何在 .NET 核心(cshtml)的 HTML 表中显示模型中的数据?
【发布时间】:2021-11-03 08:45:50
【问题描述】:

我是 .NET 核心的新手,正在研究一些基础知识。 我有一个这样的文本文件:

employees.txt

Naruto Uzumaki,19,150000
Sasuke Uchiha,18,140000
Hinata Hyuga,17,100000
Itachi Uchiha,22,200000
Nara Shikamaru,20,90000

我正在尝试在 HTML 表中显示这些数据,在 HTML 标记中使用 c# (Razor):

Index.cshtml

<table id = "empTable">
   <tr>
      <th>Name</th>
      <th>Age</th>
      <th>Salary</th>
   </tr>
@{
    foreach (string line in Model) {
    <tr>
       string[] values = line[i].Split(',');
       for(int i = 0; i < values.Length; i++)
       {
          values[i] = values[i].Trim();
          <td>@values[i]</td>
       }
    </tr>
    }
}
<table>

但显然这对我不起作用,每当我像上面那样在 Razor 中包装标签时,它都会与代码混淆,并且我会收到类似 "The name 'values' does not存在于当前上下文中”“在“”标签被解析之前,文件结尾或意外字符到达。”

我尝试了另一种方法,我尝试将 C# 字符串数组传递到我的 Javascript 代码中,以便我可以编辑我的表格标签的 innerHTML,但它也不起作用,我认为这并不容易任何一个。我已经查看了诸如序列化 C# 字符串数组或在 C# 中使用 StringBuilder 动态创建 HTML 表等解决方案,但我不确定在 .NET 文件夹中的何处包含命名空间,也不知道它是如何工作的。

任何建议都将不胜感激,非常感谢!

【问题讨论】:

  • 请在您的帖子中添加视图模型定义。

标签: javascript c# html asp.net-mvc .net-core


【解决方案1】:

这里的问题是你没有正确使用 Razor 和 C#

首先:在 C# 代码中进行操作和字符串插值,并将完全解析和拆分的字符串提供给模型。尽可能多地避开剃须刀的逻辑。 (这使得对您的逻辑进行单元测试成为可能)

因此,您可以定义一个新模型,而不是在剃刀代码中拆分字符串,例如

public class LineModel {
    private string _name;
    private int _first;
    private int _second;

    public string Name { get => _name; }
    public int FirstNumber { get => _first; }
    public int SecondNumber { get => _second; }
    public void FormatLine(string line){
        // string splitting here
    }
}

然后将每一行添加到您的 ViewModel 中,这样您的 ViewModel 中就有一个 IEnumerable(可能是一个列表)。

在你的剃刀代码中,你可以这样做:

@foreach(var line in Model.Lines) {
    <tr>
        <td>@line.Name</td>
        <td>@line.FirstNumber</td>
        <td>@line.SecondNumber</td>
    </tr>
}

请注意,我的代码在语法上可能不正确,因为我最近没有做很多剃须刀。但这是我推荐的方法,因为

1.) 它将逻辑与表示分离

2.) 它更易于维护

3.) 它是可单元测试的

4.) 它更具确定性

【讨论】:

  • 非常感谢!这非常有效。我对 .NETcore 很陌生,所以我必须弄清楚什么是模型,但非常感谢你。
  • @RachelNguyen 你熟悉“接受”答案吗?
猜你喜欢
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多