C# 如何从模型类创建html表

C# 如何从模型类创建html表,c#,asp.net,.net,asp.net-mvc,C#,Asp.net,.net,Asp.net Mvc,我是MVC新手,正在学习MVC。现在我不想使用任何网格扩展,而是只想通过HTML表格生成表格UI。所以我在寻找代码并找到了一个提示 此代码不是完整代码。这是我得到的 <% if (Model.Count() > 0) { %> <table width="35%"> <thead><tr><th>Species</th><th>Length</th></tr></th

我是MVC新手,正在学习MVC。现在我不想使用任何网格扩展,而是只想通过HTML表格生成表格UI。所以我在寻找代码并找到了一个提示

此代码不是完整代码。这是我得到的

<% if (Model.Count() > 0)
{ %>
    <table width="35%">
 <thead><tr><th>Species</th><th>Length</th></tr></thead>
  <%  foreach (var item in Model)
    { %>
     <tr>
         <td><%= item.FishSpecies%></td>
         <td align="center"><%=item.Length%></td>
     </tr>

 <% } %>
    </table>
<% }
else
{ %>
No fish collected.
<%} %>
0)
{ %>
物种长度
没有捕到鱼。
问题是,我无法可视化模型类的外观以及如何从控制器填充它。代码中未使用Viewbag,而是直接从模型类生成表

那么,有谁能为我编写一个完整的小代码来创建一个HTML表并直接使用模型填充而不使用viewbag呢


还需要模型、控制器和视图的代码。

如果要迭代模型并创建表,请首先更改视图的
@model
,如下所示:

@model IEnumerable<myPrj.Models.EntityName>
<td>@Html.DisplayFor(m => item.FishSpecies)</td>
<td>@Html.DisplayFor(m => item.Length)</td>
最后,迭代模型并创建表:

<table id="tblNews">
<tr>
    <th>
        @Html.DisplayNameFor(model => model.Property1)
    </th>

    // ...

    <th>
        @Html.DisplayNameFor(model => model.Propertyn)
    </th>        
</tr>

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Property1)
    </td>

    // ... 

    <td>
        @Html.DisplayFor(modelItem => item.Propertyn)
    </td>        
</tr>
}
</table>

如果要迭代模型并创建表,首先更改视图的
@model
,如下所示:

@model IEnumerable<myPrj.Models.EntityName>
<td>@Html.DisplayFor(m => item.FishSpecies)</td>
<td>@Html.DisplayFor(m => item.Length)</td>
最后,迭代模型并创建表:

<table id="tblNews">
<tr>
    <th>
        @Html.DisplayNameFor(model => model.Property1)
    </th>

    // ...

    <th>
        @Html.DisplayNameFor(model => model.Propertyn)
    </th>        
</tr>

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Property1)
    </td>

    // ... 

    <td>
        @Html.DisplayFor(modelItem => item.Propertyn)
    </td>        
</tr>
}
</table>

您的模型实际上需要是一个
IEnumerable
。因此您可能有一个模型:

public class Model
{
    public string FishSpecies { get; set; }
    public int Length { get; set; }

    public static IEnumerable<Model> Load() { ... }
}
然后在视图中,您需要在最顶部定义模型:

@model System.Collections.IEnumerable<My.Namespace.Model>
@model System.Collections.IEnumerable
现在,这两行行不通:

<td><%= item.FishSpecies%></td>
<td align="center"><%=item.Length%></td>

它们需要更像这样:

@model IEnumerable<myPrj.Models.EntityName>
<td>@Html.DisplayFor(m => item.FishSpecies)</td>
<td>@Html.DisplayFor(m => item.Length)</td>
@Html.DisplayFor(m=>item.FishSpecies)
@DisplayFor(m=>item.Length)

您的模型实际上需要是一个
IEnumerable
。因此您可能有一个模型:

public class Model
{
    public string FishSpecies { get; set; }
    public int Length { get; set; }

    public static IEnumerable<Model> Load() { ... }
}
然后在视图中,您需要在最顶部定义模型:

@model System.Collections.IEnumerable<My.Namespace.Model>
@model System.Collections.IEnumerable
现在,这两行行不通:

<td><%= item.FishSpecies%></td>
<td align="center"><%=item.Length%></td>

它们需要更像这样:

@model IEnumerable<myPrj.Models.EntityName>
<td>@Html.DisplayFor(m => item.FishSpecies)</td>
<td>@Html.DisplayFor(m => item.Length)</td>
@Html.DisplayFor(m=>item.FishSpecies)
@DisplayFor(m=>item.Length)


您使用的是哪个版本的MVC?哦,真的。首先,这不是一个完整的代码。您在编写控制器和操作?以及模型方面做了哪些努力?您使用的是哪个版本的MVC?哦,真的。首先,这不是一个完整的代码。您在编写控制器和操作?以及模型方面做了哪些努力?项是什么?它没有在代码中定义。just在@Html.DisplayFor(m=>item.Length)中看不到此代码这里你使用lambda,所以这里你使用m,但你实际上使用item.Length而不是m.Length?无论如何,我不擅长mvc,所以想听听你对我的答案的评论。谢谢如果我们可以直接从控制器填充模型,并使用该模型来填充任何控件,那么为什么要使用viewbag?知道什么时候可以直接使用我完成任务吗ng model那么为什么viewbag需要使用。@Thomas,要回答您的第一个问题,
DisplayFor
需要一个
Func
,因此我必须输入
m
(即参数的名称)然而,由于您处于循环中,我确实需要引用
项的值。这就是所做的。它满足了方法的需要,但是使用词法范围从
@Thomas获取值,如果您使用模型,则很少需要
视图包
。一个很好的例子是您可以使用e> 查看可在控制器中设置的标题。项目是什么?它不是在代码中定义的。只需查看此代码@Html.DisplayFor(m=>item.Length)这里你使用lambda,所以这里你使用m,但你实际上使用item.Length而不是m.Length?无论如何,我不擅长mvc,所以想听听你对我的答案的评论。谢谢如果我们可以直接从控制器填充模型,并使用该模型来填充任何控件,那么为什么要使用viewbag?知道什么时候可以直接使用我完成任务吗ng model那么为什么viewbag需要使用。@Thomas,要回答您的第一个问题,
DisplayFor
需要一个
Func
,因此我必须输入
m
(即参数的名称)然而,由于您处于循环中,我确实需要引用
项的值。这就是所做的。它满足了方法的需要,但是使用词法范围从
@Thomas获取值,如果您使用模型,则很少需要
视图包
。一个很好的例子是您可以使用e> ViewBag
获取可在控制器中设置的标题。如果我们可以直接从控制器中填充模型并在视图中使用该模型来填充任何控件,那么为什么要使用ViewBag?知道什么时候可以直接使用模型来完成工作,那么为什么需要使用ViewBag。告诉我DisplayNameFor和DisplayFor helper方法。什么它生成的html标记的d?它生成标签还是?我自己根本不使用viewbag,而是向视图发送一些非常简单的数据,例如一个标志或一个小字符串。viewbag的另一个常见用法是向视图发送一个SelectList集合,以填充DropDownList。要了解
@html.DisplayNameFor
@html.DisplayF的内容或者
do,首先查看我的答案中的模型
MyModel
。第一个属性呈现第一个属性的值
[Display(Name=“Property 1”)]
,即属性1
。第二个渲染模型带来的属性值。我不知道生成了哪些代码,但我知道这些代码将是带有某些属性的标记。DisplayNameFor是一个帮助程序,如果通过属性deco提供了属性的显示名称,它将为您提供属性的显示名称DisplayFor与属性值的作用类似,但它也会首先检查是否有用于该属性类型的显示模板(自定义呈现模板,而不是默认HTML)。如果我们可以直接从控制器填充模型,并在视图中使用该模型填充任何控件,那么为什么要使用