我的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
属性吗?我想知道为什么这没有发生吗?
答案 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标签,页面还是空白的。