c# - 作为另一个 Action 的结果返回 Action

标签 c# asp.net-mvc asp.net-mvc-2

当我尝试从另一个 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/

相关文章:

c# System.Diagnostics.Process 不执行任何操作或抛出错误

javascript - 如何动态更改 ASP.NET MVC Core2 中的 CSS 变量?

c# - ASP.net Session_Start 方法中的依赖注入(inject)

asp.net-mvc - 使用 ASP.NET MVC 实现 Google 的 hashbang/Ajax 抓取?

c# - 在我的 Controller 中将部分 View 制作为 html "string",用于 json 请求

c# - 有没有办法从 .NET 应用程序中的 WebBrowser 控件内部启用 IE8 开发人员工具

c# - 无法连接到 EntityFramework

c# - 工作单元:Dapper和存储库模式-C#.Net

c# - 在 ASP.NET MVC 应用程序中重写 ResourceManager?

c#-4.0 - 如何保护我的网站免受 session 固定?