【问题标题】:Action gets the wrong Id操作获取错误的 ID
【发布时间】:2021-07-14 12:17:38
【问题描述】:

我有日志消息。如果我想转到详细信息页面。 Id 总是作为值“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)
    {

【问题讨论】:

    标签: .net-core model-view-controller razor asp.net-core-mvc


    【解决方案1】:

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

    您的表单包含所有 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)
    {
    }
    

    测试结果:

    【讨论】:

    • 非常感谢...它有效。并酷你的例子。
    猜你喜欢
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2016-09-06
    • 2021-01-20
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多