gpt4 book ai didi

c# - 在使用严格的 PRG 模式重定向 ModelState 失败后应该如何处理刷新?

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

所以我一直使用松散的 PRG 模式,您可以在其中从 POST 操作返回有关 ModelState 验证失败的 View 。然而,一直困扰着我的是,我不仅要在 GET 操作中构建模型,还要在失败时在 POST 操作中再次重建它。我使用了不同的方法来使用“ View 模型构建器”进行重建,或者只是 Controller 中为两个操作构建 View 模型的私有(private)函数,但这些仍然困扰着我。

阅读完 Ben Foster (http://benfoster.io/blog/automatic-modelstate-validation-in-aspnet-mvc) 的这篇文章后,仅依靠 GET 操作来构建 View 模型更有意义——将其保留在代码的一个区域——然后使用必要的操作过滤器当您在失败的 POST 上重定向回 GET 时,保存 ModelState 以进行渲染。

所以我已经使用 Ben 在他的文章中提到的过滤器实现了这一点,如下所示。但是,我很好奇如果用户在 ModelState 失败时被重定向回 GET 后 刷新会发生什么情况?我如何区分直接访问 GET 的人与 ModelState 失败的人?目前,如果用户在此时刷新,ModelState 将会消失。这是正确的操作,还是用户应该继续看到错误,直到他们使用有效数据进行 POST?本质上,他们应该看到数据库中的数据,还是应该继续看到他们在 POST 时所做的更改?

[ImportModelStateFromTempData]
public ActionResult Edit(int id)
{
// in a real application this would be retrieved from the db
var editView = new EditView()
{
UserId = id,
Name = "John Doe",
Age = 20,
Message = "Hello world"
};

return View(editView);
}

[HttpPost]
[ValidateModelState]
public ActionResult Edit(EditCommand editCommand)
{
// save to db here in real application

return RedirectToAction("Success");
}

最佳答案

我在几个项目中使用相同的 [ImportModelStateFromTempData] 过滤器,效果很好。

在我看来,如果用户刷新,你不应该保留任何模型状态错误。用户正在请求该页面的全新 View ,而永远无法获得干净的 View 将令人沮丧。同样徒劳的是,在 POST 之后刷新不应该重新提交表单,在 GET 之后刷新不应该保留 POST。

关于c# - 在使用严格的 PRG 模式重定向 ModelState 失败后应该如何处理刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29332926/

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