简体   繁体   English

HttpPost Model ID 始终为 0

[英]HttpPost Model ID is always 0

I have an Update page getting a ViewModel containing my Model.我有一个更新页面,其中包含一个包含我的 Model 的 ViewModel。 When I load it to the page everything works fine but when I submit the changes my Model's ID is ALWAYS 0, I mean LITTERALY ALWAYS .当我将它加载到页面时,一切正常,但是当我提交更改时,我的模型 ID始终为 0,我的意思是LITTERALY ALWAYS I am following a tutorial, I did exactly what he did and STILL 0.我正在学习一个教程,我完全按照他的做法做了,但仍然是 0。

This is my POST method where I'm passing the VM in parameter.这是我在参数中传递 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);
    }

And here is my HTML/C# code for the ID这是我的 ID 的 HTML/C# 代码

<input type="hidden" asp-for="Expense.Id" value="@Model.Expense.Id" name="Id"/>

When I load my page my ID is loaded and everything works fine.当我加载我的页面时,我的 ID 已加载并且一切正常。 During debugging this is what I have in my HTML:在调试过程中,这就是我的 HTML 中的内容:

<input type="hidden" value="1" name="Id" data-val="true" data-val-required="The Id field is required." id="Expense_Id">

I found out why it didn't work.我发现了为什么它不起作用。

My HTML was like this我的 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>

So I just moved the input line from inside <div class="row> to <form method="post" asp-action"Update"> and removed all these useless tags like name="Id" value="@Model.Expense.Id" type="hidden"所以我只是将输入行从<div class="row>移动到<form method="post" asp-action"Update">并删除了所有这些无用的标签,例如name="Id" value="@Model.Expense.Id" type="hidden"

And now it looks just like this现在看起来就像这样

<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>

And it works fine.它工作正常。

Now please DO NOT ask me why because I don't know, but if ANYONE has the answer to WHY ?现在请不要问我为什么,因为我不知道,但如果有人回答为什么 I'm all ears.我全是耳朵。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM