我是MVC和ASP.NET的新手。我的要求是,我必须在我的View中首次显示两条记录,并且我的ViewContains一个'SWAP'按钮。当我按下此按钮时,控制器的后续操作应该执行,它必须采用原始视图模型并需要交换两个记录并应该呈现相同的视图。每当我按下交换按钮时,都应该执行此过程。
我第一次点击SWAP时,它工作正常。但是当我下次点击时,我的帖子控制器动作正在记录原始记录并显示相同的内容。
我的控制器代码如下所示。
public ActionResult Dedupe()
{
var selectedClients = TempData["SelectedClients"] as DedupeClientsViewModel;
return this.View(selectedClients);
}
[HttpPost]
public ActionResult Dedupe(DedupeClientsViewModel dedupeClients)
{
if (ModelState.IsValid)
{
//my functionality
}
return this.View(dedupeClients);
}
我是否需要使用“ModelState”来从View中获取新数据。
答案 0 :(得分:3)
因为您从帖子返回相同的模型,ASP.Net MVC假设您有错误要呈现给用户(因此它保留原始值)。您可以通过清除整个模型的模型状态或清除一个或多个字段的模型状态来解决此问题。见下文。当然,这将在您的控制器中完成。
ModelState.Clear(); //clear entire model state
ModelState.Remove("MyObject.MyProperty"); //clear only one property
Rick Strahl在他的博客上对此问题有一个很好的解释:ASPNET-MVC-Postbacks-and-HtmlHelper-Controls-ignoring-Model-Changes