我正在使用Razor Pages(而不是MVC)开发ASP.NET Core 2.0项目。
我有以下流程:
如何从页面处理程序中发布到其他页面?这是否适合执行此类操作?我不想要RedirectToPage()的原因是因为我不希望序列中的最后一页可以通过GET导航。最终页面不应该通过直接链接访问,而应该只在POST上返回。
我考虑过验证/保存数据并设置一个布尔值" IsValid"并返回页面,检查该IsValid,并立即通过JS POST到最后一页。然而,这感觉很脏。
答案 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>