Asp.net mvc ASP.NETMVC使用模型的新实例返回视图,而不是使用重定向到操作

Asp.net mvc ASP.NETMVC使用模型的新实例返回视图,而不是使用重定向到操作,asp.net-mvc,view,Asp.net Mvc,View,我有一个使用ViewModel的表单视图。通过“新建”操作呈现新视图。提交此表单后,我会将信息发送回“添加”操作 如果数据库上的所有操作都成功,我希望刷新视图。我从“添加”操作内部创建viewmodel的新实例,并返回视图(“新建”,viewmodel)。这不会刷新我的视图。所有旧值(已提交)仍保留在视图中。 是否有一种方法可以在不使用RedirectToAction方法的情况下刷新页面 我在另一篇帖子上读到,不应该使用ModelState.Clear,因为它可能会产生不希望的结果 谢谢, 玷污

我有一个使用ViewModel的表单视图。通过“新建”操作呈现新视图。提交此表单后,我会将信息发送回“添加”操作

如果数据库上的所有操作都成功,我希望刷新视图。我从“添加”操作内部创建viewmodel的新实例,并返回视图(“新建”,viewmodel)。这不会刷新我的视图。所有旧值(已提交)仍保留在视图中。 是否有一种方法可以在不使用RedirectToAction方法的情况下刷新页面

我在另一篇帖子上读到,不应该使用ModelState.Clear,因为它可能会产生不希望的结果

谢谢,

玷污

编辑1-添加代码

New

 public ActionResult New(string id)
        {
            var sysId= new Guid(id);
.......
........

  string Details = pDto.Name + "(" + pDto.Code + ")";

            var vm= new ViewModel(id);
            vm.Details = Details;

            return View(vm);
        }



 public ActionResult Add(ViewModel vm)
        {
                        ViewModel vm= vm;

            if (ModelState.IsValid)
            {

                              var dto= _qRepository.GetFeaturesBy(viewModel.Code);

                if (dto!= null)
                {

                    ModelState.AddModelError("Code", "Code is already in Use.");

                    return View("New", viewModel);
                }

                _productService.AddFeature(..........);
               // ModelState.Clear();  -- this works          
                vm= new ViewModel(vm.pId) { Message = "Code" + viewModel.Code + " was added ......", Details = vm.Details };

            }


          return  View ("New", vm);

        }

它是在填充值属性的情况下进行渲染,还是浏览器正在“自动填充”表单


RedirectToAcction将导致302响应,然后新的“获取”到新表单。

您的模型正在正常刷新

问题是HTMLHelper在使用您传递的新模型之前,首先在ViewState和ModelState中查找数据


您几乎别无选择,只能清除ModelState或自己手动更改ModelState条目。

您应该尝试遵守该模式。只有当post失败并且您希望返回验证错误以便客户端可以重新发布表单时,才可以不这样做。这就是从post操作方法返回视图时发生的情况。所有这些表单值仍在ModelState中浮动,等待在表单上再次使用


如果您想让用户立即添加另一项,可以使用
重定向到操作(“新建”)
。另外,听起来这两个动作都应该命名为
New
,然后用
[HttpPost]
属性和PostModel参数来修饰post版本。如果您在两个不同的操作之间进行post和get,事情就会变得一团糟,因为您必须记住在html表单上显式设置操作,并且在验证失败时返回正确的视图

你能为你现在正在做的事情发布代码吗?你会考虑使用清除方法安全吗?它满足了我的需要。我会在适当的时候使用它。当视图模型第一次实例化时,我会用一些值填充它,我不希望再次查询相同的值。这就是为什么我不想去新的行动和填充新的“视图模型”与参数(从张贴视图模型),因为这是我的第一个MVC项目,我想坚持最好的方式和后重定向得到似乎是正确的方式。非常感谢。