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 标签,上面写着欢迎。