我有以下简单(为了问题的目的)控制器/动作:
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对象中的视图而忽略控制器可能做了哪些更改?
提前致谢
答案 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);
}
它会起作用。