c# - HttpPost 模型 ID 始终为 0
问题描述
我有一个更新页面,其中包含一个包含我的模型的 ViewModel。当我将它加载到页面时,一切正常,但是当我提交更改时,我的模型 ID始终为0,我的意思是LITTERALY ALWAYS。我正在学习一个教程,我完全按照他的做法做了,但仍然是0。
这是我在参数中传递 VM 的 POST 方法。
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Update(ExpenseVM obj)
{
if (ModelState.IsValid)
{
_db.Expenses.Update(obj.Expense);
_db.SaveChanges();
return RedirectToAction("Index");
}
return View(obj);
}
这是我的 ID 的 HTML/C# 代码
<input type="hidden" asp-for="Expense.Id" value="@Model.Expense.Id" name="Id"/>
当我加载我的页面时,我的 ID 已加载并且一切正常。在调试期间,这就是我的 HTML 中的内容:
<input type="hidden" value="1" name="Id" data-val="true" data-val-required="The Id field is required." id="Expense_Id">
解决方案
我发现了为什么它不起作用。
我的 HTML 是这样的
<form method="post" asp-action="Update">
<div class="border p-3">
<div class="form-group row">
<h2 class="text-black-50 pl-3">Update Expense</h2>
</div>
<div class="row">
<input type="hidden" asp-for="Expense.Id" value="@Model.Expense.Id" name="Id"/>
<div class="col-12">
... BLABLABLA
</div>
</div>
</div>
</form>
所以我只是将输入行从内部<div class="row>
移到<form method="post" asp-action"Update">
并删除了所有这些无用的标签,例如name="Id"
value="@Model.Expense.Id"
type="hidden"
现在看起来就像这样
<form method="post" asp-action="Update">
<input asp-for="Expense.Id" hidden/>
<div class="border p-3">
<div class="form-group row">
<h2 class="text-black-50 pl-3">Update Expense</h2>
</div>
<div class="row">
<div class="col-12">
... BLABLABLA
</div>
</div>
</div>
</form>
它工作正常。
现在请不要问我为什么,因为我不知道,但如果有人回答为什么?我全是耳朵。
推荐阅读
- javascript - Django modelformset_factory - 如何使用 javascript 保存多条记录
- php - PHP以JSON格式保存文件
- reactjs - 使用 node-fetch 计算下载百分比的正确方法
- mysql - 将 RDS 上的 MySQL 数据库实例迁移到 Amazon Aurora
- javascript - 如何使用 nodejs 在 Dialogflow 中处理 webhook 实现
- javascript - 按日期重新排列对象数组
- arrays - Excel VBA,将2组数据组合成一个数组并删除空白行
- java - 从 SBT 资源文件夹中读取文件而不转义字符
- java - 无法在 Quarkus 上启动 gRPC 服务器 - 无法找到暴露 `BindableService` 的 bean
- c# - 如何在 C# 中将按钮名称添加到字典中?