c#-作为另一个动作的结果返回动作
作者:互联网
当我尝试从另一个动作返回一个动作时,我遇到了一个问题.
我得到这样的东西:
public ActionResult Action (int param1, string param2)
{
ActionViewModel vm = new ActionViewModel();
vm.Param1Prop = param1;
vm.Param2Prop = param2;
return View(vm);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Action (ActionViewModel vm)
{
//Do Something...
if (vm.DoItAgain)
{
return Action(vm.Param1Prop-1, vm.Param2Prop);
}
return View(vm);
}
当该行返回Action(vm.Param1Prop-1,vm.ParamProp);转到Action(int param1,string param2),执行,一切看起来都进行得很好.但是不要.渲染结果看起来像是执行return View(vm)一样,vm的所有值都与Post Action中发送的相同,而不是我在return Action(vm.Param1Prop-1,vm.ParamProp );.
我不确定为什么不起作用,返回的ActionResult被忽略了吗?第一个Action方法中的代码可以很好地执行(我调试并在其中放入日志来检查它),第一个方法的返回是响应的结尾,所以为什么看起来该行从未发生过?
我还尝试在PostAction上修改虚拟机,以查看是否以某种方式推断了虚拟机.那也不行.
为此,我放置了一个RedirectToAction而不是使用return Action:
RedirectToAction(“ Action”,new {param1 = vm.Param1Prop-1,param2 = vm.Param2Prop});一切正常.我完全理解为什么RedirectToAction可以工作,但是我无法弄清楚为什么不调用Action方法.
任何人都可以启发我吗?
解决方法:
您可能会看到的是原始POST中的ModelState值.这些将优先于您返回视图的视图.您可以通过清除ModelState中的值来纠正此问题.但是,您不需要.
您不应该从另一个动作中返回一个动作.您应该将重定向返回到该操作:
return RedirectToAction("Action",
new { param1 = vm.Param1Prop-1, param2 = vm.Param2Prop });
因为您现在已经执行了适当的重定向,而不是直接从POST直接返回GET操作的结果,所以当原始请求结束时,ModelState将被清除,并且您将看不到旧的发布值.
标签:asp-net-mvc-2,c,asp-net-mvc 来源: https://codeday.me/bug/20191029/1956568.html