操作获取错误的 Id

Action gets the wrong Id

我有日志消息。如果我想去详细信息页面。 Id returns 始终为值“1”。

我做错了什么?

html 页(查看)。

@model List<LogBerichtModel>

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link href="css/styles.css" rel="stylesheet" />
</head>
<body>
    @using (Html.BeginForm("DetailInfo", "Home", FormMethod.Post))
    {
        <div class="container">
            <div><h4>Logberichten</h4></div>
            <div class="row logs" id="app">
                <div class="mt-5 d-flex align-content-xl-stretch flex-column p-5">
                    <table class="table table-striped m-2">
                        <thead>
                            <tr class="bg-primary-custom">
                                <th>@Html.DisplayNameFor(Model => Model[0].Bericht)</th>
                                <th>@Html.DisplayNameFor(Model => Model[0].Datum)</th>
                                <th>@Html.DisplayNameFor(Model => Model[0].Systeem)</th>
                                <td>@Html.DisplayNameFor(Model => Model[0].Klasse)</td>
                                <td>@Html.DisplayNameFor(Model => Model[0].Methode)</td>
                                <td>@Html.DisplayNameFor(Model => Model[0].Systeemmelding):</td>
                                <td></td>
                            </tr>
                        </thead>
                        @for (var item = 0; item < Model.Count; item++)
                        {
                            <tbody>
                                <tr style='background-color:@(item%2 == 0 ? "#FEF2F4":"#FEE2CA"  );'>
                                    <td>@Html.DisplayFor(Model => Model[item].Bericht)</td>
                                    <td>@Html.DisplayFor(Model => Model[item].Datum)</td>
                                    <td>@Html.DisplayFor(Model => Model[item].Systeem)</td>
                                    <td>@Html.DisplayFor(Model => Model[item].Klasse)</td>
                                    <td>@Html.DisplayFor(Model => Model[item].Methode)</td>
                                    <td>@Html.DisplayFor(Model => Model[item].Systeemmelding)</td>
                                    <td>
                                        <input id="id" name="id" type="hidden" value="@Model[item].Id" />
                                        <input class="bg-primary-custom" type="submit" value="Submit" title="DetailInfo" />
                                    </td>
                                </tr>
                            </tbody>
                        }
                    </table>
                </div>
            </div>
        </div>
        <script src="~/lib/jquery/dist/jquery.min.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
        <script src="~/js/site.js" asp-append-version="true"></script>
    }
</body>

在控制器中(id始终为1)

    [HttpPost]
    public IActionResult DetailInfo(int id)
    //public IActionResult DetailInfo(LogBerichtModel logbericht)
    {

你的循环在表单中,你的提交动作是针对整个表单的提交。

您的表单包含所有 ID,因此当您提交时,您提交了一组 ID。

我建议你使用@Html.ActionLink

像下面这样改变你的View

@model List<LogBerichtModel>

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link href="css/styles.css" rel="stylesheet" />
</head>
<body>
<div class="container">
        <div><h4>Logberichten</h4></div>
        <div class="row logs" id="app">
            <div class="mt-5 d-flex align-content-xl-stretch flex-column p-5">
                <table class="table table-striped m-2">
                    <thead>
                        <tr class="bg-primary-custom">
                             <th>@Html.DisplayNameFor(Model => Model[0].Bericht)</th>
                            <th>@Html.DisplayNameFor(Model => Model[0].Datum)</th>
                            <th>@Html.DisplayNameFor(Model => Model[0].Systeem)</th>
                            <td>@Html.DisplayNameFor(Model => Model[0].Klasse)</td>
                            <td>@Html.DisplayNameFor(Model => Model[0].Methode)</td>
                            <td>@Html.DisplayNameFor(Model => Model[0].Systeemmelding):</td>
                        <td></td>
                        </tr>
                    </thead>
                    @for (var item = 0; item < Model.Count; item++)
                    {
                        <tbody>
                            <tr style='background-color:@(item%2 == 0 ? "#FEF2F4":"#FEE2CA"  );'>
                                <td>@Html.DisplayFor(Model => Model[item].Bericht)</td>
                                <td>@Html.DisplayFor(Model => Model[item].Datum)</td>
                                <td>@Html.DisplayFor(Model => Model[item].Systeem)</td>
                                <td>@Html.DisplayFor(Model => Model[item].Klasse)</td>
                                <td>@Html.DisplayFor(Model => Model[item].Methode)</td>
                                <td>@Html.DisplayFor(Model => Model[item].Systeemmelding)</td>
                                <td>
                                    @Html.ActionLink("DetailInfo", "DetailInfo", "Home",  new { id = @Model[item].Id }, null)
                                </td>
                            </tr>
                        </tbody>
                    }
                </table>
            </div>
        </div>
    </div>
    <script src="~/lib/jquery/dist/jquery.min.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>
</body>

并将您的方法更改为 get

 [HttpGet]
 public IActionResult DetailInfo(int id)
{
}

测试结果: