Saltar al contenido

Cómo redirigir a una ruta diferente en el lado del servidor de Blazor

Solución:

Si puede activar en la página de la maquinilla de afeitar, puede utilizar lo siguiente:

@page "/YourPageName"
@inject NavigationManager NavigationManager

<h1>xxx</h1>
.
.
.


@code {

    void MethodToTriggerUrl()
    {
        NavigationManager.NavigateTo("PageToRedirect");
    }
}

Después de un tiempo y un tiempo de experimentar, descubrí que en el lado del servidor esto está funcionando:

using Microsoft.AspNetCore.Blazor.Services;
(...)
UriHelper.NavigateTo("/route");

Por supuesto, se ve casi igual, pero funciona (al menos en Blazor 0.8)

No es exactamente lo que está buscando, pero “una solución” de todos modos. Parece que actualmente no puedo encontrar una manera de hacer algo similar a Response.Redirect en el lado del servidor, pero usando jsinterop, en el componente que desea poder redirigir FROM, use algo como esto. Tenga en cuenta que también tenía curiosidad, y sabiendo que esto también me surgiría a mí mismo, hice lo siguiente:

Entonces, según la aplicación de muestra con la plantilla de proyecto del lado del servidor …

index.cshtml

@using Microsoft.JSInterop;

 <a href="https://foroayuda.es/#" class="btn btn-primary" onclick="@GoSomewhere">Go somewhere with Blazor</a>

@functions {
    protected void GoSomewhere()
    {
        RedirectTo("/FetchData");  //or any other "page" in your pages folder
    }

    public static Task<string> RedirectTo(string path)
    {
        return JSRuntime.Current.InvokeAsync<string>(
            "clientJsfunctions.RedirectTo", path);
    }    
}

luego, debajo de la carpeta wwwwroot, coloque un archivo javascript con esto:

window.clientJsfunctions = {       
    RedirectTo: function (path) {
        window.location = path;
    }
};

Finalmente, en su archivo de arranque, index.html, coloque una referencia a este archivo js

<body>
    <app>Loading...</app>

    <script src="https://foroayuda.es/_framework/blazor.server.js"></script>

    <script src="scripts/ClientUtil.js"></script>
</body>

Aún mejor, coloque métodos como el que se encuentra arriba de “RedirectTo” en una clase separada, y utilícelo como una clase base para la mayoría de sus páginas de componentes.

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Blazor.Components;
using Microsoft.JSInterop;

namespace MyApp.Web.App.Shared
{
    public class MycomponentBase : BlazorComponent
    {
        public static Task<string> RedirectTo(string path)
        {
            return JSRuntime.Current.InvokeAsync<string>(
                "clientJsfunctions.RedirectTo", path);
        }
    }
}

Además, recuerde poner esto en la parte superior de cada componente @inherits MycomponentBase;

Ahora, debería tener un método “Redirigir” al que pueda llamar desde cualquier componente que se derive de su clase de componente base.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *