Asp.net mvc 发布后视图中未显示更新的模型值

Asp.net mvc 发布后视图中未显示更新的模型值,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我有以下简单的(就问题而言)控制员/行动: public ActionResult Edit(int id) { User user = repository.GetUser(id); return View(user); } [HttpPost] public ActionResult Edit(User user) { user.Name = user.Name.ToUpper(); return View(user); } 该视图是使用VS中的常规步骤

我有以下简单的(就问题而言)控制员/行动:

public ActionResult Edit(int id)
{
    User user = repository.GetUser(id);
    return View(user);
}

[HttpPost]
public ActionResult Edit(User user) 
{
    user.Name = user.Name.ToUpper();
    return View(user);
}
该视图是使用VS中的常规步骤为用户编辑生成的

我面临的问题是,在“名称”文本框中输入的任何内容都将显示给用户,但不带大写字母。我已经检查并执行了POST的编辑操作,user.Name值变为大写,但.TextBoxFor仍使用用户输入的值,该值为小写

我还检查了如果我在帖子后打印Model.Name的值(不使用任何Html帮助程序),它将是大写的,因为我希望Html.TextBoxFor能够正常工作

这是MVC的一个缺陷吗

有没有一种方法可以按照我想要的方式来完成这项工作,也就是说,动作/控制器是决定视图数据值的拼图中的一块,而不是使用请求对象中的数据值并忽略控制器可能已经做过的更改的视图


提前感谢

使用RedirectToAction并将Id传递给用户,这不是bug,而是POST行为

更新:如Dismissile所说,您需要在重定向到操作之前保留信息,或者如果不想保留,请使用TempData


您可以使用ModelState.Remove(属性名称),如:


它将起作用。

如果不以某种方式持久化数据,这将不会起任何作用。除了重定向到操作之外,还有更好的解决方案吗?我想指出,视图中的模型实例具有大写值。只是Html帮助程序没有从中获取值,即使TextBoxFor上的表达式显式读取为model=>model.Name。我认为问题与POST无关,而是与帮助程序Html函数有关。有关澄清,请参阅此问题的选择答案,关于POST操作的行为。
[HttpPost]
public ActionResult Edit(User user) 
{
    user.Name = user.Name.ToUpper();
    return RedirectToAction("Edit", new { id = user.id });
}
[HttpPost]
public ActionResult Edit(User user) 
{
    ModelState.Remove("Name");
    user.Name = user.Name.ToUpper();
    return View(user);
}