我在 ASP.NET MVC 中有一个 HTML 表,它在 HTML 表中显示来自 Model MyModel 的数据。现在我需要的是 Codigo_User 和 Codigo_Campo 列(存储代码)向我显示这些代码的描述,这些代码位于其他表 MyTablaCampos 和 MyTablaUsers 在这里我留下我的模型的定义: MyModel
public partial class MyModel
{
public int Id { get; set; }
public string Codigo_User { get; set; }
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public Nullable<System.DateTime> Fecha_solicitud { get; set; }
public Nullable<int> Codigo_Campo { get; set; }
public string Ubicacion { get; set; }
public MyTablaCampos Campos { get; set; }
public MyTablaUsers Users { get; set; }
}
namespace MyProyect.Models
{
using System;
using System.Collections.Generic;
public partial class MyTablaUsers
{
public string Codigo_User { get; set; }
public string Nombre { get; set; }
public string Contacto { get; set; }
public string RFC { get; set; }
}
}
namespace MyProyect.Models
{
using System;
using System.Collections.Generic;
public partial class MyTablaCampos
{
public short Cod_Empresa { get; set; }
public string Codigo_User { get; set; }
public short Codigo_Campo { get; set; }
public string Descripcion { get; set; }
public short Tipo { get; set; }
public short Producto { get; set; }
}
}
这是我的HTML表格的结构,在我希望名称出现的列中,什么都没有出现,所以我不知道是否还有其他解决方案。谢谢。
@model IEnumerable<Inocuidad.Models.MyModel>
<div class="col-sm-12 table-responsive table-condensed table-sm" style="font-size:small">
<table class="table table-hover" id="dataTableCreditos">
@if (Model != null)
{
<thead class="thead-light">
<tr>
<th>Codigo_User</th>
<th>Usuario</th>
<th>Codigo_Campo</th>
<th>Campo</th>
<th>Fecha de solicitud</th>
<th>Ubicacion</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Codigo_User, new { id = "Codigo_User" })
</td>
<td>
@Html.DisplayFor(modelItem => item.Users.Nombre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Codigo_Campo, new { id = "Codigo_Campo" })
</td>
<td>
@Html.DisplayFor(modelItem => item.Campos.Descripcion)
</td>
<td>
@Html.ValueFor(modelItem => item.Fecha_solicitud)
</td>
<td>
@Html.DisplayFor(modelItem => item.Ubicacion)
</td>
</tr>
}
</tbody>
}
</table>
</div>
public ActionResult SetSolicitud()
{
var item = from s in bd.MyModel select s;
return View(item.ToList());
}
预期结果
原则上,您的代码应该可以正常工作,但是您的问题中没有指出一系列考虑因素,这些因素可能是导致错误的因素。
第一个也是最明显的是类的
MyTablaCampos
and属性没有返回任何值。在将结果从控制器返回到视图之前,请使用调试器检查这一点。MyTablaUsers
MyModel
第二个选项是您没有正确地将模型从控制器返回到视图。您应该在问题中说明您的控制器代码。请注意,您的 View 必须接收 Model 类型
MyModel
,并且您必须在指令中指明这一点@model List<MyModel>
。另一方面,您必须从控制器发送模型以及要表示的数据到视图。我已经在 Visual Studio 中复制了您的示例,并且使用我在下面指出的控制器可以正常工作:
问题必须出在您示例中的三个表相关的方式上。表也通过字段
MyTablaCampos
与表有关系。MyTablaUsers
public string Codigo_User { get; set; }
当您执行 LinQ 查询
from s in bd.MyModel select s
时,转换为SQL的条件将是:尝试修改模型
MyTablaCampos
并将属性添加到它public MyTablaUsers Users { get; set; }
:您可以做的是创建一个 ModelView 来执行您所提议的内容。
在您的控制器中:
我将用 lambda 表达式替换它:
根据官方文档:
急于加载
急切加载是对一种实体类型的查询也加载相关实体作为查询的一部分的过程。急切加载是通过使用 include 方法实现的。例如,以下查询将加载博客以及与每个博客相关的所有帖子。
文档说明:
Include 是 namespace 上的扩展方法
System. Data. Entity
,因此您需要确保使用该命名空间。评论:
现在理论上你已经加载了属性,它应该可以被视图渲染。
更新:
在它相关的类中:
现在关于字段:
为了提高你对实体框架的理解和掌握,强烈推荐这个网站:https ://www.entityframeworktutorial.net/