MVC,将模型ID从视图传递到控制器
MVC, Pass model Id from view to controller
我有一个从数据库中获取的行列表。当我在我的视图中显示它们时,我使用 foreach 来显示它们。在每一行我都放置了一个提交按钮,我希望用户能够在每一行中 select 。为此,我需要将 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");
}
<input type='hidden' value="@item.LearningNumberId"/>
<input class="btn btn-primary" id="@item.LearningNumberId" type="submit" value="Vælg"/>
只需添加一个具有值和正确名称(与操作的参数名称相同)的隐藏。
您需要一个名称正确的 for input 才能提交值。您可以使用现有的提交按钮(只需向其添加 name="id"
属性并将值设置为您想要的 id 值),或者您可以添加一个隐藏的输入(如 )。
此外,您已将您的控制器代码标记为 "My current controller",但您的表单似乎专门指向您的 "Home" 控制器中的操作 - 这就是您想要的控制器吗?
您不需要创建多个表单
将您的视图代码替换为以下代码:
@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>
}
}
注意:将输入类型="submit"更改为按钮
然后按钮的名称将是要绑定的按钮,值是您的 ID
就这么简单!!!
我有一个从数据库中获取的行列表。当我在我的视图中显示它们时,我使用 foreach 来显示它们。在每一行我都放置了一个提交按钮,我希望用户能够在每一行中 select 。为此,我需要将 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");
}
<input type='hidden' value="@item.LearningNumberId"/>
<input class="btn btn-primary" id="@item.LearningNumberId" type="submit" value="Vælg"/>
只需添加一个具有值和正确名称(与操作的参数名称相同)的隐藏。
您需要一个名称正确的 for input 才能提交值。您可以使用现有的提交按钮(只需向其添加 name="id"
属性并将值设置为您想要的 id 值),或者您可以添加一个隐藏的输入(如
此外,您已将您的控制器代码标记为 "My current controller",但您的表单似乎专门指向您的 "Home" 控制器中的操作 - 这就是您想要的控制器吗?
您不需要创建多个表单
将您的视图代码替换为以下代码:
@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>
}
}
注意:将输入类型="submit"更改为按钮 然后按钮的名称将是要绑定的按钮,值是您的 ID
就这么简单!!!