所以....我在我的控制器中有一个动作,基本上复制当前模型并返回基于该副本的新视图。为了通知用户这是一个副本,我通过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属性,这是控制器中的新属性,但是当视图呈现它时它回到旧的属性。
答案 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。