POST后,视图中未显示更新的模型值

时间:2011-12-23 14:53:39

标签: 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

中的常规步骤生成视图为用户编辑

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

我还检查过,如果我在POST之后打印(不使用任何Html Helper)Model.Name的值,它将在UPPER CASE中,因为我希望Html.TextBoxFor能够表现。

这是MVC的错误吗?

有没有办法以我想要的方式使这项工作,这意味着动作/控制器是拼图中的一块,用于决定View的数据值,而不是使用Request对象中的视图而忽略控制器可能做了哪些更改?

提前致谢

2 个答案:

答案 0 :(得分:1)

使用RedirectToAction并为用户传递Id,这不是错误,是POST行为

  

更新:您需要在RedirectToAction之前将信息保留为Dismissile,或者如果您不想保留,请使用TempData。

[HttpPost]
public ActionResult Edit(User user) 
{
    user.Name = user.Name.ToUpper();
    return RedirectToAction("Edit", new { id = user.id });
}

答案 1 :(得分:0)

您可以使用ModelState.Remove(nameOfProperty),如:

[HttpPost]
public ActionResult Edit(User user) 
{
    ModelState.Remove("Name");
    user.Name = user.Name.ToUpper();
    return View(user);
}

它会起作用。