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

S-V*_*Vuk 4 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处理程序。

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

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

pca*_*ins 5

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

<form method="post" asp-page="/pathto/otherpage">
Select Example:<select name="DataForOtherPage">
Run Code Online (Sandbox Code Playgroud)

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

 [BindProperty]
 public string DataForOtherPage { get; set; }
Run Code Online (Sandbox Code Playgroud)


Joh*_* Wu -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");
}
Run Code Online (Sandbox Code Playgroud)

做这样的事情:

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");
}
Run Code Online (Sandbox Code Playgroud)

如果你真的想交叉发帖

如果您坚持使用交叉发布,则必须渲染一个执行该发布的页面,例如

<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>
Run Code Online (Sandbox Code Playgroud)

  • 否决,这个答案适用于 MVC 操作和视图,而不是 Razor 页面处理程序(技术上讲,MVVM)。 (4认同)