Перенаправление страниц Razor ASP.NET не работает - PullRequest
0 голосов
/ 30 августа 2018

У меня есть этот OnPost метод на моей странице NewGame:

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

А на странице игры я перенаправляю на:

@page "{name}"

Однако, когда я отправляю страницу NewGame со значением в поле «Имя», я получаю эту ошибку:

InvalidOperationException: No route matches the supplied values.

И я перенаправлен в игру, а не в игру / Wh whatNameIEntered. Почему это? Я установил точку останова в своем методе OnPost, а свойство Name устанавливается из поля формы. Как я могу получить перенаправление, чтобы перейти на правильный URL?

Кстати, разве свойство модели страницы Name не должно автоматически заполняться из поля в моей форме? Интересно, почему этого не происходит?

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Прежде всего вы можете получить значение Name в качестве параметра в вашем действии:

public IActionResult OnPost(string Name)
{
    :
}

О перенаправлении вы используете его неправильно. Я думаю, что Game - это Razor Page в вашей папке Pages. В этом случае вы можете использовать следующий код:

public IActionResult OnPost(string Name)
{
    return RedirectToPage($"/Game", new { Name = Name });
}
0 голосов
/ 24 октября 2018

Мне удалось перейти на другую страницу бритвы с помощью этого:

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, в котором написано "Добро пожаловать".

0 голосов
/ 30 августа 2018

Является ли Game контроллером? Маршрут по умолчанию следует этому шаблону

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

Это будет означать, что ваш Wh whatNameIEntered должен быть действием в вашем контроллере, и я сомневаюсь, что у вас есть действие для каждого вашего имени. Один из способов сделать это - настроить маршрут под свои нужды. Как то так.

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