ASP.NET Razor页面重定向不起作用

时间:2018-08-30 01:59:18

标签: c# asp.net razor razor-pages

我的NewGame页面上有此OnPost方法:

public IActionResult OnPost()
{
    Name = Request.Form["Name"];
    return RedirectToRoute($"Game/{Name}");
}

在“游戏”页面上,我重定向到:

@page "{name}"

但是,当我在“名称”字段中提交带有值的NewGame页面时,出现此错误:

InvalidOperationException: No route matches the supplied values.

我被重定向到Game,而不是Game / WhatNameNameIEntered。为什么是这样?我在OnPost方法中设置了一个断点,并且Name属性是从form字段中设置的。如何获得重定向以转到正确的URL?

顺便说一句,不是应该从表单上的字段自动填充页面模型Name属性吗?我想知道为什么这没有发生吗?

3 个答案:

答案 0 :(得分:1)

首先,您可以在操作中获取名称值作为参数:

public IActionResult OnPost(string Name)
{
    :
}

关于重定向,您以错误的方式使用它。我猜游戏是您的Pages文件夹中的Razor Page。在这种情况下,您可以使用以下代码:

public IActionResult OnPost(string Name)
{
    return RedirectToPage($"/Game", new { Name = Name });
}

答案 1 :(得分:0)

游戏是控制器吗?默认情况下,路由遵循此模式

{controller=Home}/{action=Index}/{id?}

这意味着您的WhateverNameIEntered必须是控制器中的一个操作,我怀疑您对每个名称都有一个操作。 一种解决方法是根据您的需求定制路线。像这样的东西。

routes.MapRoute(
    name: "myGameRoute",
    template: "game/{id}",
    defaults: new { controller = "Game", action = "Index" });

答案 2 :(得分:0)

使用以下方法,我设法转到了另一个剃刀页面:

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标签,页面还是空白的。