【问题标题】:ASP.NET Razor Pages redirect isn't workingASP.NET Razor 页面重定向不起作用
【发布时间】:2019-02-04 21:07:53
【问题描述】:

我的 NewGame 页面上有这个 OnPost 方法:

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

在我重定向到的游戏页面上:

@page "{name}"

但是,当我在 Name 字段中提交带有值的 NewGame 页面时,我收到此错误:

InvalidOperationException: No route matches the supplied values.

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

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

【问题讨论】:

  • 你有处理$"Game/{Name}"路由的控制器吗?
  • 您通常会重定向到您之前映射的路线。您似乎正在尝试在控制器方法中映射路线。

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


【解决方案1】:

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

public IActionResult OnPost(string Name)
{
    :
}

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

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

【讨论】:

  • 谢谢!我想知道为什么重定向路径中 Game 之前的斜线是必要的?
  • /Game表示我们在pages文件夹中寻找Game.cshtml文件,/Game/Something表示我们在Pages文件夹的Game文件夹中寻找Something.cshtml文件,最后 ./Game 表示 Game.cshtml 文件,它位于当前剃须刀页面所在的文件夹内。
  • 酷!那么没有斜线的 Game 是什么意思?
  • 没有斜杠它不是一个有效的 asp-page 值。这将导致使用当前页面。每次指定的 asp 页面无效时都会使用当前页面。
【解决方案2】:

Game 是控制器吗?路由默认遵循这种模式

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

这意味着你的 WhatNameIEntered 必须是你的控制器中的一个动作,我怀疑你对你拥有的每个名字都有一个动作。 一种方法是根据您的需要自定义路线。像这样。

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

【讨论】:

    【解决方案3】:

    我已经设法通过使用这个进入另一个剃须刀页面:

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

    【讨论】:

      猜你喜欢
      • 2021-03-07
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 2022-01-19
      • 2019-08-15
      相关资源
      最近更新 更多