gpt4 book ai didi

asp.net - 更改 HTTP post 上的 ASP.NET MVC 2 ActionResult

转载 作者:行者123 更新时间:2023-12-02 11:10:31 24 4
gpt4 key购买 nike

我想在返回 View 之前对属性进行一些处理。如果我将下面的 HttpPost ActionResult 方法中返回的 appModel.Markup 设置为“已修改”,它在表单上仍显示“原始”。为什么我无法在 HttpGet ActionResult 方法中修改我的属性?

    [HttpGet]
public ActionResult Index()
{
return View(new MyModel
{
Markup = "original"
});
}

[HttpPost]
public ActionResult Index(MyModel appModel)
{
return View(new MyModel
{
Markup = "modified"
});
}

最佳答案

因为“原始”存储在 ModelState 中。当在 MVC 端收集表单值时,它们存储在 ModelState 对象中。您可能使用了 Html.TextBox 帮助器。当您在 POST 后重新创建 View 时,它首先查找 ModelState,如果有发布的值,它会设置该值。模型对象中的值不再重要。

解决方案之一是遵循 POST-REDIRECT-GET 模式。首先 POST,对数据执行一些操作,然后重定向:

[HttpPost]
public ActionResult Index(MyModel appModel)
{
//do something with data
return RedirectToAction("Index");
}

如果你想在重定向之间传递一些东西,你可以使用TempData:

[HttpPost]
public ActionResult Index(MyModel appModel)
{
//do something with data
TempData["Something"] = "Hello";
return RedirectToAction("Index");
}

[HttpGet]
public ActionResult Index()
{
var something = TempData["Something"]; //after redirection it contains "Hello"
}

重定向后,ModelState 消失,因此没有可覆盖的值。 POST-REDIRECT-GET 模式还有助于消除在浏览器中按 F5 时的表单重新发布效果。

关于asp.net - 更改 HTTP post 上的 ASP.NET MVC 2 ActionResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754851/

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