【问题标题】:MVC, Pass model Id from view to controllerMVC,将模型 ID 从视图传递到控制器
【发布时间】:2015-05-06 01:53:28
【问题描述】:

我有一个从数据库中获取的行列表。当我在视图中显示它们时,我使用 foreach 来显示它们。在每一行我都放置了一个提交按钮,我希望用户能够选择每一行。为此,我需要将 Id 传递给控制器​​。

问题:如何将模型 ID 从视图传递到控制器?

现在控制器中“changeCheckBoxStatusToTrue(int?id)”中的Id返回NULL。

我目前的看法:

foreach (var item in Model)
    {
        <div class="col-md-12 table" style="display: table; margin: 0 0 0 0; ">
            <div class="col-md-2">
                <p><b>@Html.DisplayFor(modelItem => item.Name)</b></p>
            </div>
            <div class="col-md-2">
                <p>
                    @using (Html.BeginForm("changeCheckBoxStatusToTrue", "Home", FormMethod.Post))
                    {
                        //var id = item.LearningNumberId; <-- I tried this but it didnt seem to work?
                    <input class="btn btn-primary" id="@item.LearningNumberId" type="submit" value="Vælg" />                     
                    }                        
                </p>
            </div>
        </div>
    }

我当前的控制器:

    [HttpPost]
    public ActionResult changeCheckBoxStatusToTrue(int? id) {

        var checkboxes = db.LearningNumbers.Where(em => em.LearningNumberId == id).ToList();
        checkboxes.ForEach(em => em.setCheckBox = true);
        db.SaveChanges();

        return RedirectToAction("Index");

    }

【问题讨论】:

    标签: c# razor model-view-controller


    【解决方案1】:
       <input type='hidden' value="@item.LearningNumberId"/>     
       <input class="btn btn-primary" id="@item.LearningNumberId" type="submit" value="Vælg"/> 
    

    只需添加一个带有值和正确名称的隐藏项(与操作的参数名称相同)。

    【讨论】:

    • 谢谢史蒂夫。这做到了!
    【解决方案2】:

    您需要具有正确名称的 for 输入来提交值。您可以使用现有的提交按钮(只需为其添加 name="id" 属性并将值设置为您想要的 id 值),或者您可以添加隐藏输入(如 Steves suggests)。

    此外,您已将控制器代码标记为“我当前的控制器”,但您的表单似乎指向您的“主页”控制器中的特定操作 - 是您想要的控制器吗?

    【讨论】:

    • 谢谢 Jim,我使用了 steves,但您的解决方案也很有效。只是为了回答您的问题 - 是的,它旨在使用 Home 控制器。 :) 很抱歉造成混乱。
    【解决方案3】:

    您不需要创建多个表单

    将您的视图代码替换为以下代码:

    @using (Html.BeginForm())
    {
       foreach (var item in Model)
       {
          <div class="col-md-12 table" style="display: table; margin: 0 0 0 0; ">
             <div class="col-md-2">
                <p><b>@Html.DisplayFor(modelItem => item.Name)</b></p>
             </div>
             <div class="col-md-2">
                <p>
                   <button type="submit" value="@item.LearningNumberId" name="id">CLick!! </button>
                </p>
             </div>
          </div>
       }
    }
    

    注意:将您的输入类型=“提交”更改为按钮 那么按钮的名称将是要绑定的那个,值是你的 id

    就这么简单!!!

    【讨论】:

    • 谢谢卢卡斯。我试过只是为了检查,这也有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多