c# - 如何将 htmlhelper 的值从表(视图)传递给控制器?
问题描述
我想在针对特定 ID 单击更新按钮时仅更新一行中的单个值,该 ID 在控制器中可用,但更新的值字段不可用,因此当我按下更新按钮时,控制器更新了数据库但存储了一个数据库中的空值。
//View Code
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(m => item.Id)
</td>
<td>
@Html.DisplayFor(m => item.TagName)
</td>
<td>
@Html.DisplayFor(m => item.TagCategory)
</td>
<td>
@Html.TextBoxFor(m => item.TagValue, new { htmlAttributes = new { @class = "form-control" } })
</td>
<td>
@Html.ActionLink("Update", "Update", new { id = item.Id}, new { htmlAttributes = new { @class = "form-control" } })
</td>
</tr>
}
</tbody>
//Controller Code
public ActionResult Update([Bind(Include = "Id,TagValue") ]Tag tags)
{
var data = db.Tags.Where(x => x.Id == tags.Id).FirstOrDefault();
if (data!=null)
{
data.TagValue = tags.TagValue;
db.SaveChanges();
return RedirectToAction("Index");
}
return View();
}
解决方案
所以现在你的更新按钮发出一个 GET 请求。数据库存储 null 是因为当您创建 ActionLink 时,您没有将 TagValue 作为参数传递,因为对于 GET 请求,变量需要在 url 中传递。您可以像这样添加 TagValue 作为参数
@Html.ActionLink("Update", "Update", new { id = item.Id, TagValue = item.TagValue }, new { htmlAttributes = new { @class = "form-control" } })
我认为这不会按照您想要的方式工作,因为我假设您希望用户能够更改 TagValue 的值,然后点击更新以保存该值。这个解决方案所做的只是获取 TagValue 的原始值。
如果您希望能够编辑 TagValue 然后提交,您可以将您的 html 更改为如下所示
<tbody>
@foreach (var item in Model)
{
<tr>
<form action="@Url.Action("Update")" method="post">
<td>
@Html.HiddenFor(m => item.Id, new { @Name = "Id" })
@Html.DisplayFor(m => item.Id)
</td>
<td>
@Html.DisplayFor(m => item.TagName)
</td>
<td>
@Html.DisplayFor(m => item.TagCategory)
</td>
<td>
@Html.TextBoxFor(m => item.TagValue, new { @class = "form-control", @Name="TagValue" })
</td>
<td>
<input type="submit" value="Update" />
</td>
</form>
</tr>
}
这将为您拥有的每个标签创建一个表单,然后在您点击提交时生成一个 POST 请求。
vikscool 的评论也是您可以使用的另一个很好的解决方案。
推荐阅读
- amazon-web-services - 为什么我的 Springboot 部署到 EBS 不起作用?
- react-native - 不变违规:requireNativeComponent:在 UIManager 中找不到“AIRMap”。没有修复?
- data-warehouse - 初始化 Key FACT\DIM 表时如何保持参照完整性
- python - 简单的温度转换器
- python - 输入层的多个特征 Keras Python
- c++ - 合并排序的比较和排序部分有问题(c++)
- scala - 向 Akka HTTP HttpRequest 添加标头
- php - 在 Woocommerce 我的帐户订单表中更改视图按钮文本
- ruby-on-rails - 从同一模型中添加 2 个对导轨模型的引用
- swift - CoreMotion - 识别跳跃 (Swift)