编程语言
首页 > 编程语言> > c#-作为另一个动作的结果返回动作

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