Asp.net mvc ASP.NET Core-基于现有模型使用“从数据库中选择”创建视图
我有从Asp.net mvc ASP.NET Core-基于现有模型使用“从数据库中选择”创建视图,asp.net-mvc,asp.net-core,Asp.net Mvc,Asp.net Core,我有从Main表生成的标准视图,该视图与我的模型一起生成 现在,我不想使用标准的详细信息视图,该视图基于主表显示单个记录的详细信息,而是要显示该id出现在另一个表(称为审核表)中的所有行的列表(如索引视图) 因此,当用户在主表(模型)的索引视图中单击Details时,它应该从显示id的审计表中获取记录列表 主表型号: public partial class Main { public int id{ get; set; } public int Soc
Main
表生成的标准视图,该视图与我的模型一起生成
现在,我不想使用标准的详细信息
视图,该视图基于主表
显示单个记录的详细信息,而是要显示该id
出现在另一个表(称为审核表
)中的所有行的列表(如索引
视图)
因此,当用户在主表(模型)的索引视图中单击Details
时,它应该从显示id的审计表中获取记录列表
主表型号:
public partial class Main
{
public int id{ get; set; }
public int SocID { get; set; }
public string Name { get; set; }
public string Title { get; set; }
public string User { get; set; }
}
public partial class Audit
{
public int idAudit{ get; set; }
public int id{ get; set; }
public int SocID { get; set; }
public string Name { get; set; }
public string Title { get; set; }
public string User { get; set; }
public string DateOfChange { get; set; }
public string Operation { get; set; }
}
审核表模型:
public partial class Main
{
public int id{ get; set; }
public int SocID { get; set; }
public string Name { get; set; }
public string Title { get; set; }
public string User { get; set; }
}
public partial class Audit
{
public int idAudit{ get; set; }
public int id{ get; set; }
public int SocID { get; set; }
public string Name { get; set; }
public string Title { get; set; }
public string User { get; set; }
public string DateOfChange { get; set; }
public string Operation { get; set; }
}
因此,我修改了主模型控制器中的Details
类,以基于主表中的id
返回审核表中的所有记录,方法如下:
public IActionResult Details(int? id)
{
if (id == null)
{
return NotFound();
}
var Audit = (from c in _context.Audit
where c.id == id
select new Audit
{
SocID = c.SocID,
Name = c.Name,
Title = c.Title,
User = c.User,
DateOfChange = c.DateOfChange,
Operation = c.Operation
}).ToList();
if (Audit == null)
{
return NotFound();
}
return View(Audit);
}
“我的详细信息视图”类现在如下所示:
@model IEnumerable<Audit>
@{
ViewData["Title"] = "Audit ....";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="table-responsive tableFixHead">
<table class="table table-striped table-hover mx-auto w-auto" id="nkz10table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.SocID)
</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Title)
</th>
<th>
@Html.DisplayNameFor(model => model.User)
</th>
<th>
@Html.DisplayNameFor(model => model.DateOfChange)
</th>
<th>
@Html.DisplayNameFor(model => model.Operation)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.SocID)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.User)
</td>
<td>
@Html.DisplayFor(modelItem => item.DateOfChange)
</td>
<td>
@Html.DisplayFor(modelItem => item.Operation)
</td>
</tr>
}
</tbody>
</table>
</div>
@model IEnumerable
@{
ViewData[“标题”]=“审核…”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
@DisplayNameFor(model=>model.SocID)
@DisplayNameFor(model=>model.Name)
@DisplayNameFor(model=>model.Title)
@DisplayNameFor(model=>model.User)
@DisplayNameFor(model=>model.DateOfChange)
@DisplayNameFor(model=>model.Operation)
@foreach(模型中的var项目)
{
@DisplayFor(modeleItem=>item.SocID)
@DisplayFor(modelItem=>item.Name)
@DisplayFor(modeleItem=>item.Title)
@DisplayFor(modelItem=>item.User)
@DisplayFor(modelItem=>item.DateOfChange)
@DisplayFor(modelItem=>item.Operation)
}
编辑
在“索引”视图中,我通过以下方式调用详细信息:
@model IEnumerable<Audit>
....
<a asp-action="Details" asp-route-id="@item.id">Details</a>
@model IEnumerable
....
细节
当我点击Details
查看在Audit
表中有多条记录的特定id时
404-找不到页面
我做错了什么?问题在于控制器的定义,以下是最终对我有效的方法:
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var audit= _context.audit
.Where(m => m.Nkz10Pk == id);
if (audit== null)
{
return NotFound();
}
return View(audit);
}
公共异步任务详细信息(int?id)
{
if(id==null)
{
返回NotFound();
}
var audit=\u context.audit
其中(m=>m.Nkz10Pk==id);
如果(审核==null)
{
返回NotFound();
}
返回视图(审计);
}
404错误来自哪里?检查id
字段还是检查Audit
?如果您确实获得了id
的预期值,那么您可以检查其中c.id==id
是否是您预期的语句。@Bemn id也存在于审计表和Main中。详细信息视图中的链接包含/id,为什么404-我不知道。详细信息链接在哪里生成?我看不出来。这通常会指出问题所在。以及为索引提供服务的控制器page@Marcus为索引提供服务的控制器工作正常,编辑和删除视图也是如此。我编辑了答案,以查看我如何调用详细信息。可能是因为我使用的是详细的审计模型,而不是主表模型。但我将主表的id作为caling参数传递给使用审计模型的控制器,它没有找到详细操作方法的路径。路由问题。