8

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

我有以下流程:

  1. 用户填写表格和帖子
  2. 此页面的 POST 处理程序验证信息并在有问题时返回 Page()。如果没有,处理程序将数据保存到数据库。
  3. 从这里开始,我希望处理程序使用步骤 2 中经过验证和保存的数据 POST 到不同页面的 POST 处理程序。

如何从页面处理程序中 POST 到另一个页面?这是做这种事情的合适方法吗?我不想 RedirectToPage() 的原因是我不希望序列中的最后一页可以通过 GET 导航。最后一页不应通过直接链接访问,而应仅在 POST 上返回。

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

4

2 回答 2

8

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

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

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

 [BindProperty]
 public string DataForOtherPage { get; set; }
于 2019-02-11T20:19:32.797 回答
-4

你不需要跨帖子!

如果可能,您应该避免交叉发布。在原来的动作下做这一切。该操作可以通过在调用中指定视图名称来返回不同的视图View

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

例如,而不是

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>
于 2018-01-03T02:22:15.680 回答