gpt4 book ai didi

asp.net-mvc - ASP.Net MVC 使用新的模型实例返回 View 而不是使用重定向到操作

转载 作者:行者123 更新时间:2023-12-04 13:55:01 25 4
gpt4 key购买 nike

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

如果对 DB 的所有操作都成功,我想刷新 View 。我从“添加”操作中创建了一个新的 viewmodel 实例并返回 View("New",viewModel) 。这并没有刷新我的看法。所有旧值(已提交)仍保留在 View 中。
有没有办法在没有 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);

}

最佳答案

您应该尽量遵守 post-redirect-get图案。唯一不这样做的时候是发布失败并且您想要返回验证错误以便客户端可以重新发布表单。当您从 post action 方法返回 View 时会发生这种情况。所有这些表单值仍然在 ModelState 中 float ,等待在表单上再次使用。

您可以使用 RedirectToAction("New")如果您想让用户立即添加另一个项目。此外,听起来这两个操作都应该命名为 New然后用 [HttpPost] 装饰后期版本属性和 PostModel 参数。如果您发布并在两个不同的操作之间进行操作,事情会变得困惑,因为那时您必须记住在 html 表单上显式设置操作,并在验证失败时返回正确的 View 。

关于asp.net-mvc - ASP.Net MVC 使用新的模型实例返回 View 而不是使用重定向到操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4620277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com