我有一个使用ViewModel的表单视图.Action"New"呈现新视图.提交此表单后,我将信息发送回"添加"操作.
如果DB上的所有操作都成功,我想刷新视图.我从"添加"操作中创建了一个新的viewmodel实例,并返回View("New",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);
}
Run Code Online (Sandbox Code Playgroud)
您应该尝试遵循post-redirect-get模式.您没有的唯一一次是发布失败并且您想要返回验证错误,以便客户端可以重新发布表单.这是从post action方法返回视图时发生的情况.所有这些表单值仍然在ModelState中浮动,等待在表单上再次使用.
RedirectToAction("New")如果您想让用户立即添加其他项目,您可以使用.此外,听起来应该命名两个动作New,然后用[HttpPost]属性和PostModel参数装饰帖子版本.如果你发布并在两个不同的动作之间进行操作,事情会变得混乱,因为那时你必须记住在html表单上明确设置动作,并在验证失败时返回正确的视图.
您的模型正在刷新。
问题是HTMLHelpers首先使用在您传递的新模型之前在ViewState和ModelState中查找数据。
您几乎没有选择但是要自己清除ModelState或手动更改ModelState条目。
| 归档时间: |
|
| 查看次数: |
6974 次 |
| 最近记录: |