渲染视图时,模型不会仅更新视图包

时间:2012-10-05 08:19:32

标签: asp.net-mvc-3

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

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

模型

public class Model{
    [ScaffoldColumn(false)]
    [HiddenInput(DisplayValue = false)]
    public Guid Id { get; set; }

    public string Name { get; set; }
}

视图

<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);
}

我正在努力解决这个问题,所以任何帮助/提示/指示都非常感激。

哦,我已经多次遍历代码以确保克隆真的是克隆。区分它们的唯一方法是Id属性,这是控制器中的新属性,但是当视图呈现它时它回到旧的属性。

1 个答案:

答案 0 :(得分:1)

在返回克隆之前,您需要清除ModelState集合,因为HtmlHelpers更愿意重用已发布的数据:

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

您可以在本文中详细了解此功能:ASP.NET MVC Postbacks and HtmlHelper Controls ignoring Model Changes