当我尝试从另一个 Action 返回一个 Action 时,我遇到了一个问题。 我得到了这样的东西:
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);
}
当行 return 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 上的 vm,以查看是否以某种方式推断出 vm。那也不行。
为了让它工作,我放置了一个 RedirectToAction 而不是使用 return Action:
RedirectToAction("Action", new { param1 = vm.Param1Prop-1, param2 = vm.Param2Prop });
一切正常。我完全理解为什么 RedirectToAction 有效,但我不明白为什么调用 Action 方法不起作用。
有没有大佬可以指教一下?
最佳答案
您可能看到的是原始 POST 中的 ModelState
值。这些将优先于您返回 View 的那些。您可以通过清除 ModelState
中的值来纠正此问题。但是,您不需要这样做。
您不应从一个 Action 返回另一个 Action 。您应该为该操作返回一个重定向:
return RedirectToAction("Action",
new { param1 = vm.Param1Prop-1, param2 = vm.Param2Prop });
因为您现在已经执行了正确的重定向,而不是直接从 POST 返回 GET 操作的结果,所以 ModelState
将在原始请求结束时被清除,您将看不到您的旧发布值。
关于c# - 作为另一个 Action 的结果返回 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26753596/