如何从一个页面处理程序发布到另一个?

时间:2018-01-03 01:48:49

标签: asp.net post razor asp.net-core razor-pages

我正在使用Razor Pages(而不是MVC)开发ASP.NET Core 2.0项目。

我有以下流程:

  1. 用户填写表单和POST
  2. 此页面的POST处理程序验证信息并在出现问题时返回Page()。如果没有,处理程序将数据保存到数据库。
  3. 从这里开始,我希望处理程序使用步骤2中经过验证和保存的数据POST到不同页面的POST处理程序。
  4. 如何从页面处理程序中发布到其他页面?这是否适合执行此类操作?我不想要RedirectToPage()的原因是因为我不希望序列中的最后一页可以通过GET导航。最终页面不应该通过直接链接访问,而应该只在POST上返回。

    我考虑过验证/保存数据并设置一个布尔值" IsValid"并返回页面,检查该IsValid,并立即通过JS POST到最后一页。然而,这感觉很脏。

2 个答案:

答案 0 :(得分:2)

将表单的“ asp-page”属性设置为其他页面。然后以标准方式设置值。

<form method="post" asp-page="/pathto/otherpage">
Select Example:<select name="DataForOtherPage">

然后在您的控制器中,绑定值...

 [BindProperty]
 public string DataForOtherPage { get; set; }

答案 1 :(得分:-1)

您不需要发帖!

如果可能,你应该避免交叉发布。在原始行动下完成所有工作。该行动可以return a different view by specifying the view name in the View call

如果交叉发布的目标包含您不想复制的复杂逻辑,请将其解压缩到公共库,然后从两个操作中调用它。

例如,而不是

ActionResult Action1()
{
    if (canHandleItMyself)
    {
        return View("View1");
    }
    else
    {
        return //Something that posts to action2
    }
}

ActionResult Action2()
{
    DoSomethingComplicated1();
    DoSomethingComplicated2();
    DoSomethingComplicated3();
    DoSomethingComplicated4();
    return View("View2");
}

做这样的事情:

class CommonLibrary
{
    static public void DoSomethingComplicated()
    {
        DoSomethingComplicated1();
        DoSomethingComplicated2();
        DoSomethingComplicated3();
        DoSomethingComplicated4();
    }
}

ActionResult Action1()
{
    if (canHandleItMyself)
    {
        return View("View1");
    }
    else
    {
        CommonLibrary.DoSomethingComplicated();
        return View("View2");
    }
}

ActionResult Action2()
{
    CommonLibrary.DoSomethingComplicated();
    return View("View2");
}

如果你真的想交叉发布

如果您坚持使用交叉发布,则必须呈现发布帖子的网页,例如:

<HTML>
<BODY>
    <IMG Src="/Images/Spinner.gif">  <!-- so the user doesn't just see a blank page -->
    <FORM name="MyForm" Action="Action2" Method="Post">
        <INPUT type="hidden" Name="Argument1" Value="Foo">    
        <INPUT type="hidden" Name="Argument2" Value="Bar">
    </FORM>
    <SCRIPT type="text/javascript>
        document.getElementById("MyForm").submit();  //Automatically submit
    </SCRIPT>
</BODY>
</HTML>