首页 > 解决方案 > 如何将 ID 参数从视图传递到控制器?

问题描述

我无法将 ID 值传递给输入提交按钮中的控制器方法。我正在尝试根据用户单击 O 按钮的行来传递 ActionItemID 值。我似乎无法调用控制器中的值。

@model SQLApplication.Models.ActionItems.ActionItemsViewModel

    <table class="table table-condensed table-action-items">
    <tr>
        <th>@Html.DisplayNameFor(model => model.Description.Status)</th>
        <th>@Html.DisplayNameFor(model => model.Description.Principal)</th>
        <th>@Html.DisplayNameFor(model => model.Description.CompanyName)</th>
        <th>@Html.DisplayNameFor(model => model.Description.ActionItem)</th>
        <th>@Html.DisplayNameFor(model => model.Description.Owners)</th>
        <th>@Html.DisplayNameFor(model => model.Description.DueDate)</th>
        <th>@Html.DisplayNameFor(model => model.Description.UpdatedDate)</th>
        <th>@Html.DisplayNameFor(model => model.Description.CreatedDate)</th>
        <th>@Html.DisplayNameFor(model => model.Description.Sales)</th>
        <th></th>
    </tr>

    @foreach (var item in Model.Items)
    {
        <tr>
            <td>@Html.DisplayFor(modelItem => item.Status)</td>
            <td>@Html.DisplayFor(modelItem => item.Principal)</td>
            <td>@Html.DisplayFor(modelItem => item.CompanyName)</td>
            <td>@Html.DisplayFor(modelItem => item.ActionItem)</td>
            <td>@Html.DisplayFor(modelItem => item.Owners)</td>
            <td>@Html.DisplayFor(modelItem => item.DueDate)</td>
            <td>@Html.DisplayFor(modelItem => item.UpdatedDate)</td>
            <td>@Html.DisplayFor(modelItem => item.CreatedDate)</td>
            <td>@Html.DisplayFor(modelItem => item.Sales)</td>

            <td class="right"><input type="submit" name="O" value="@item.ActionItemId" class="btn btn-default" onclick="location.href='@Url.Action("Open", "ActionItems")'" /></td>
            <td class="right"><input type="submit" value="P" class="btn btn-default" onclick="location.href='@Url.Action("Index", "ActionItems")'" /></td>
            <td class="right"><input type="submit" value="C" class="btn btn-default" onclick="location.href='@Url.Action("Index", "ActionItems")'" /></td>

        </tr>
    }
</table>

标签: asp.netasp.net-mvclistbuttonparameters

解决方案


您正在执行的重定向中没有值:

location.href='@Url.Action("Open", "ActionItems")'

如果您想id包含一个值,请将其添加到Url.Action方法调用中:

location.href='@Url.Action("Open", "ActionItems", new { id = item.ActionItemId })'

看起来您确实正在尝试使用一个属性,该属性本身在您的提交按钮提交时value很有用。<form>但我怀疑,如果没有<form>,您的按钮没有做任何事情,所以您添加了 JavaScript 重定向。无论哪种方式都有效,真的。主要区别在于:

  • 像这样的重定向只是一个 GET 请求,而不是一个 POST。如果您需要 POST,请在完成时使用表单或 AJAX 和重定向。
  • 大多数时候用户都启用了 JavaScript,这不是问题。但有时确实如此,例如出于可访问性需求。确保您可以依赖使用 JavaScript 的用户。

推荐阅读