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参数传递给使用审计模型的控制器,它没有找到详细操作方法的路径。路由问题。