【问题标题】:Model values no shown updated in the view after a POSTPOST 后视图中未显示更新的模型值
【发布时间】:2013-06-22 00:27:15
【问题描述】:

我有以下简单(出于问题的目的)控制器/动作:

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 中使用常规步骤将视图生成为 Edit for User

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

我还检查过,如果我在 POST 之后打印(不使用任何 Html Helper)Model.Name 的值,它将为大写,因为我希望 Html.TextBoxFor 能够正常运行。

这是 MVC 的错误吗?

有没有办法按照我想要的方式进行这项工作,这意味着动作/控制器是难题中的一部分,用于决定视图的数据值,而不是使用请求对象中的数据值并忽略视图控制器可能做了哪些更改?

提前致谢

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:

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

    更新:如Dismissile所说,您需要在RedirectToAction之前将信息持久化,如果您不想持久化,请使用TempData。

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

    【讨论】:

    • 如果不以某种方式持久化数据,这将无济于事。
    • 这个问题除了RedirectToAction还有更好的解决方案吗?
    • 我想指出,视图中的模型实例具有大写值。只是当 TextBoxFor 上的表达式显式读取为 model => model.Name 时,Html 助手并没有从中获取值。
    • 我认为这个问题与 POST 无关,而是与 Helper Html 函数有关
    • 为了澄清,请参阅此问题的选择答案,关于 POST 操作的行为。 stackoverflow.com/q/4620277/743965
    【解决方案2】:

    您可以像这样使用 ModelState.Remove(nameOfProperty):

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

    它会起作用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 2020-11-11
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多