将许多对象中的一个从视图传递到控制器

时间:2018-03-27 18:22:17

标签: asp.net-mvc hidden-field asp.net-mvc-viewmodel

在ASP.Net Core网络应用中,我通过List<Parameter>ViewBag.Parameters传递给了一个视图。该视图还有SelectParameterViewModel,仅由一个属性int ParameterId组成。然后这些对象显示在一个像这样的表中(我直接跳到tbody,因为从化妆品的角度来看,视图工作正常):

@model WebApp.Models.ReportViewModels.SelectParameterViewModel
[...]
<tbody>
    @foreach (var item in ViewBag.Parameters)
    {
    <tr>
        <td class="col-xs-1">
            <form asp-controller="Report" asp-action="Launch">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <input asp-for="@Model.ParameterId" type="hidden" value="@item.Id" />
                <input type="submit" class="btn btn-primary btn-sm" value="Select" />
            </form>
        </td>
        <td class="col-xs-8">@item.Description</td>
        <td class="col-xs-3">
            <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
            <a asp-action="Details" asp-route-id="@item.Id">Details</a> |
            <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
        </td>
    </tr>
    }
</tbody>

我希望用户点击所选表格行的按钮并提交该行的Parameter(首选)或Parameter的{​​{1}},就像我试过的那样在这种情况下做。然后我会对第三列的Id标记执行相同的操作。关键是我不希望用户只是简单地键入<a>并运行报告,因为每个用户都有自己的参数集,不应该被允许使用任何其他参数和ViewBag仅包含其/Report/Launch/id的列表。我可以根据解决方案更改视图模型和/或接收控制器的参数,两者都可以。我尝试了以上html的几个版本,但没有一个可行,而上面的回报Parameter的值为ParameterId。 在其他SO问题中我找不到类似的场景。有些解决方案涉及JavaScript,如果我错了,请纠正我,但仍会在网页源中显示0值。虽然在这种特定情况下这种情况会很好,但我还有其他情况,我绝对不希望这种情况发生。 实现这一目标的优雅解决方案是什么?谢谢!

0 个答案:

没有答案