ASP.NET Razor 页面重定向无效
ASP.NET Razor Pages redirect isn't working
我的 NewGame 页面上有这个 OnPost
方法:
public IActionResult OnPost()
{
Name = Request.Form["Name"];
return RedirectToRoute($"Game/{Name}");
}
在游戏页面上,我重定向到:
@page "{name}"
但是,当我提交 NewGame 页面并在名称字段中输入值时,出现此错误:
InvalidOperationException: No route matches the supplied values.
我被重定向到游戏,而不是 Game/WhateverNameIEntered。为什么是这样?我在我的 OnPost
方法中设置了一个断点,并且 Name
属性 是从表单字段中设置的。如何让重定向转到正确的 URL?
顺便问一下,页面模型 Name
属性 不是应该从我表单上的字段自动填充吗?我想知道为什么这没有发生?
Game是控制器吗?默认情况下路由遵循此模式
{controller=Home}/{action=Index}/{id?}
这意味着你的 WhateverNameIEntered 必须是你控制器中的一个动作,我怀疑你对你拥有的每个名字都有一个动作。
一种方法是根据您的需要自定义路线。像这样。
routes.MapRoute(
name: "myGameRoute",
template: "game/{id}",
defaults: new { controller = "Game", action = "Index" });
首先,您可以在操作中获取值 Name 作为参数:
public IActionResult OnPost(string Name)
{
:
}
关于重定向你用错了。我想 Game 是您的 Pages 文件夹中的一个 Razor Page。在这种情况下,您可以使用以下代码:
public IActionResult OnPost(string Name)
{
return RedirectToPage($"/Game", new { Name = Name });
}
我已经通过使用这个成功地转到了另一个剃须刀页面:
HTML:
<button name="Users" value="Users" style="width:150px; height:150px" id="btn_Users" onclick="GoToUsers()">
Users
</button>
脚本:
function GoToUsers() {
fetch('http://localhost:50747/api/Users/Users')
.then(function (response) {
if (response.status === 200) {
window.location.href = "/Home/Users";
}
else {
alert("Failure, could not navigate");
}
});
}
控制器:
Route("api/Users")]
public class UsersController : Controller
{
private readonly UsersContext _context;
public IActionResult Login()
{
return View();
}
public ViewResult Users() => View();
public UsersController(UsersContext context)
{
_context = context;
}
//[HttpGet]
[Route("Users")]
[HttpGet]
public IActionResult GoToUsers()
{
try
{
//return RedirectToPage("/Users");
return Users();
}
catch (Exception ex)
{
throw ex;
}
}
}
它导航到我的用户页面,该页面位于名为 "Home" 的文件夹中,该文件夹位于名为 "Views"
的文件夹中
然而,页面是空白的,即使我有一个 H2 标签,上面写着欢迎。
我的 NewGame 页面上有这个 OnPost
方法:
public IActionResult OnPost()
{
Name = Request.Form["Name"];
return RedirectToRoute($"Game/{Name}");
}
在游戏页面上,我重定向到:
@page "{name}"
但是,当我提交 NewGame 页面并在名称字段中输入值时,出现此错误:
InvalidOperationException: No route matches the supplied values.
我被重定向到游戏,而不是 Game/WhateverNameIEntered。为什么是这样?我在我的 OnPost
方法中设置了一个断点,并且 Name
属性 是从表单字段中设置的。如何让重定向转到正确的 URL?
顺便问一下,页面模型 Name
属性 不是应该从我表单上的字段自动填充吗?我想知道为什么这没有发生?
Game是控制器吗?默认情况下路由遵循此模式
{controller=Home}/{action=Index}/{id?}
这意味着你的 WhateverNameIEntered 必须是你控制器中的一个动作,我怀疑你对你拥有的每个名字都有一个动作。 一种方法是根据您的需要自定义路线。像这样。
routes.MapRoute(
name: "myGameRoute",
template: "game/{id}",
defaults: new { controller = "Game", action = "Index" });
首先,您可以在操作中获取值 Name 作为参数:
public IActionResult OnPost(string Name)
{
:
}
关于重定向你用错了。我想 Game 是您的 Pages 文件夹中的一个 Razor Page。在这种情况下,您可以使用以下代码:
public IActionResult OnPost(string Name)
{
return RedirectToPage($"/Game", new { Name = Name });
}
我已经通过使用这个成功地转到了另一个剃须刀页面:
HTML:
<button name="Users" value="Users" style="width:150px; height:150px" id="btn_Users" onclick="GoToUsers()">
Users
</button>
脚本:
function GoToUsers() {
fetch('http://localhost:50747/api/Users/Users')
.then(function (response) {
if (response.status === 200) {
window.location.href = "/Home/Users";
}
else {
alert("Failure, could not navigate");
}
});
}
控制器:
Route("api/Users")]
public class UsersController : Controller
{
private readonly UsersContext _context;
public IActionResult Login()
{
return View();
}
public ViewResult Users() => View();
public UsersController(UsersContext context)
{
_context = context;
}
//[HttpGet]
[Route("Users")]
[HttpGet]
public IActionResult GoToUsers()
{
try
{
//return RedirectToPage("/Users");
return Users();
}
catch (Exception ex)
{
throw ex;
}
}
}
它导航到我的用户页面,该页面位于名为 "Home" 的文件夹中,该文件夹位于名为 "Views"
的文件夹中然而,页面是空白的,即使我有一个 H2 标签,上面写着欢迎。