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