gpt4 book ai didi

asp.net-mvc - MVC 3 模型值在第二次回发时丢失

转载 作者:行者123 更新时间:2023-12-01 11:51:23 24 4
gpt4 key购买 nike

我有一个包含多个字段的模型 View 。当我在 GET 上呈现 View 时,我有一个隐藏字段存储此时为空的代码。然后我发布并在操作中通过模型向此代码字段添加一个值并将模型发送到 View ,如:

return View (model);

当 View 呈现时,隐藏字段没有代码值,但 View 确实包含在第一步中输入的所有其他值。所以现在当我在第二个按钮上发布时,传递给操作的模型不包含我在第一次发布响应时传递给它的隐藏代码值。

如果我在第一篇文章中更新了模型,将其发送回具有新值的 View ,我是否应该将该代码存储在可用 View 的隐藏输入中并能够再次将其发送回操作?

我还意识到,如果我在第一次回发时更改任何模型字段并将更新后的模型发送到 View ,它只会保留第一个 POST 操作的值。我这里有缓存问题吗?我该如何管理这种行为?谢谢

最佳答案

在更改 POST 操作中的值之前,您应该将其从 ModelState 中删除:

[HttpPost]
public ActionResult Foo(MyViewModel model)
{
// update the value of the model that was POSTed to some new value
model.SomeProperty = "some new value";

// remove POSTed value from the modelstate if you intend to modify it here
ModelState.Remove("SomeProperty");

return View(model);
}

你需要这样做的原因是因为 Html helpers 如 Html.HtextBoxFor, Html.HiddenFor, ... 在绑定(bind)时首先使用 modelstate 的值并且然后是您模型的值(value)。如果您不从 ModelState 中删除该值,则 HiddenFor 助手将使用原始的 POSTed 值,它是一个空字符串,而不是您在操作中修改的值。

关于asp.net-mvc - MVC 3 模型值在第二次回发时丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11181100/

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