【问题标题】:How to send item through ActionLink to ASP.NET MVC controller?如何通过 ActionLink 将项目发送到 ASP.NET MVC 控制器?
【发布时间】:2017-12-30 07:39:01
【问题描述】:

在这里,我在表格中有一些行,并列出了我的产品的标志,在这种情况下称为项目。当我想将标志编辑为打开或关闭(是/否)时,我需要访问整个项目本身,因为我没有其他方法可以识别我点击了哪个项目的标志。

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            <ul>
                @foreach (var flag in item.Flags)
                {
                    <li>
                        @Html.DisplayFor(modelItem => flag.Name) |
                        @(flag.Enabled ? "Yes" : "No") |
                        @Html.ActionLink("Edit", "FlagEdit", new { flagId = flag.Id, itemId = item.Id })
                    </li>
                }

            </ul>
        </td>

如果不清楚,请询问,我会详细说明。我正在尝试发送 itemId,但因为我在 foreach 的标志内,所以我无法掌握它。

当我到达第一个如果检查参数不为空时,检查失败。

    [ActionName("FlagEdit")]
    public async Task<ActionResult> EditFlagAsync(string flagId, string itemId)
    {
        if (flagId == null || itemId == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        Item item = await DocDBRepo<Item>.GetItem(itemId);
        if (item == null)
        {
            return HttpNotFound();
        }

        //do update

        return View(item);
    }

我已经尝试过搜索,但也许我只是没有搜索正确的关键字。有人可以帮忙吗?

【问题讨论】:

  • 您的问题到底是什么? itemId 没有达到控制方法?您的 ActionLink 看起来不错
  • 已更新控制器及其失败的确切位置。 flagId 不为空,所以我知道 actionLink 没问题,我只是无法从外部 foreach 发送我的项目

标签: c# asp.net razor model-view-controller


【解决方案1】:

试试这个:

@Html.ActionLink("Edit", "FlagEdit", new { flagId = flag.Id, itemId = item.Id }, null)

【讨论】:

  • ActionLink 是一个+9重载的扩展方法,如果在routeValues后面不设置null,框架会认为这些新的{ flagId = flag.Id, itemId = item.Id }是htmlAttributes 参数。因此,在这种情况下,控制器级别的参数将保持为空。但是当你传递第四个空参数时,参数匹配是正确的
猜你喜欢
  • 2020-07-13
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多