gpt4 book ai didi

c# - 为什么 mvc "remember"旧模型在 "beginform"内?

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:16 24 4
gpt4 key购买 nike

当我多次重新显示表单时,我在 MVC 中发现了一些非常奇怪的行为。我想知道是否有人可以帮我弄清楚发生了什么:

我的 Controller 代码:

   [HttpPost, ActionName("Delete")]
public ActionResult Delete(Person person)
{
if (person.PersonID != default(int))
{
try
{
_personRepository.Delete(person.PersonID);
_personRepository.Save();
}
catch (Exception)
{
}
}

return PartialView(new Person() {Name = Lang("Personen er slettet")});
}

我的查看代码:

@model Person
<h3>@Html.Lang("Er du sikker på at du vil slette")?</h3>
<div>@Html.DisplayNameFor(m => m.Name): "@Model.Name"</div>
<div>@Html.DisplayNameFor(m => m.PersonID): "@Model.PersonID"</div>
@{
var id = Model.PersonID;
}
@using (Html.BeginForm())
{
<p>
@Html.HiddenFor(m => Model.PersonID)
@Html.HiddenFor(m => Model.Name)
<input type="hidden" value="@Model.PersonID" id="personID" name="personID"/>
<input type="hidden" value="@Model.Name" id="Name" name="Name"/>
</p>
}

我在 Delete(Person person) 函数返回 View 时得到的结果:

<h3>Er du sikker p&#229; at du vil slette?</h3>
<div>Navn: "Personen er slettet"</div>
<div>PersonID: "0"</div>

<form action="/KongsbergGruppenCompanyRegister/Person/Delete?PersonID=10" method="post"> <p>
<input data-val="true" data-val-required="The PersonID field is required." id="PersonID" name="PersonID" type="hidden" value="10" />
<input data-val="true" data-val-length="The field Navn must be a string with a maximum length of 255." data-val-length-max="255" id="Name" name="Name" type="hidden" value="dfhgdfgh" />
<input type="hidden" value="0" id="personID" name="personID"/>
<input type="hidden" value="Personen er slettet" id="Name" name="Name"/>
</p>
</form>

让我指出模型突然是“预删除”模型的地方。这是如何发生的,为什么会发生,什么是更正确的编码方式? (我可以通过简单地不使用“hiddenFor”方法来让它工作,但这似乎违反直觉)

最佳答案

CodeCaster 是正确的,因为它几乎是重复的,但是另一个线程的答案是不正确的。我在另一个线程的评论之一中找到了正确答案:

http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx

正确答案是 MVC 助手直接从请求中读取值。他们这样做是为了能够正确显示错误提交的信息(如 int 字段中的“dog”)。

另一个线程建议使用“ModelState.Clear()”,但是我发现这不起作用。我使用的完美解决方法是使用“RedirectToAction”。

关于c# - 为什么 mvc "remember"旧模型在 "beginform"内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17063729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com