Asp.net mvc 3 渲染视图时,模型不会仅更新viewbag

Asp.net mvc 3 渲染视图时,模型不会仅更新viewbag,asp.net-mvc-3,Asp.net Mvc 3,所以。。。。我的控制器中有一个操作,它基本上复制当前模型并基于该副本返回一个新视图。为了通知用户这是一份副本,我通过viewbag附加了一条消息,说明这是一份副本。在我注意到渲染新视图时使用的不是副本,而是原始视图,但另一方面,viewbag已更新,以便显示消息之前,所有这些都似乎正常工作 嗯,我不知道这是否可以理解,所以我将尝试用一些伪代码来说明我的意思: 模型 看法 我真的很难理解这一点,所以任何帮助/提示/指点都非常感谢 哦,我已经对代码进行了多次检查,以确保克隆确实是一个克隆。唯一区别它

所以。。。。我的控制器中有一个操作,它基本上复制当前模型并基于该副本返回一个新视图。为了通知用户这是一份副本,我通过viewbag附加了一条消息,说明这是一份副本。在我注意到渲染新视图时使用的不是副本,而是原始视图,但另一方面,viewbag已更新,以便显示消息之前,所有这些都似乎正常工作

嗯,我不知道这是否可以理解,所以我将尝试用一些伪代码来说明我的意思:

模型 看法 我真的很难理解这一点,所以任何帮助/提示/指点都非常感谢


哦,我已经对代码进行了多次检查,以确保克隆确实是一个克隆。唯一区别它们的是Id属性,这是控制器中的新属性,但当视图呈现时,它会返回到旧属性。

在返回克隆之前,您需要清除
ModelState
集合,因为HTMLHelper更喜欢重用发布的数据:

public ActionResult Copy(model) {
    ViewBag.Message = _("This is a copy.");
    var clone = model.Clone();
    ModelState.Clear();
    return View("Index", clone);
}

您可以在这篇文章中阅读有关此功能的更多信息:。

谢谢!你救了我的命,现在它就像一个符咒。谢谢你的链接。
<input type="submit" name="Copy" value="@_("Copy")"/>
public ActionResult Copy(model) {
    ViewBag.Message = _("This is a copy.");
    var clone = model.Clone();
    return View("Index", clone);
}
public ActionResult Copy(model) {
    ViewBag.Message = _("This is a copy.");
    var clone = model.Clone();
    ModelState.Clear();
    return View("Index", clone);
}