actualización de la parte de la página después de unbtrusive ajax post en Razor Pages

Tengo Razor Pages con una forma. Publica datos y establece algún mensaje de estado. El correo se hace ajax de forma discreta. Sin embargo, de esta manera el mensaje de estado nunca aparece en la página. ¿Puedes, por favor, guiarme cómo se hace esta actualización en Razor Pages?

Parte HTML

// I need to update this part
Result @Model.CheckMessage

Parte de backend

    public class IndexModel : PageModel
    {
     
        [Required]
        [BindProperty]
        public string Code { get; set; }

        public string CheckMessage { get; set; }

        public async Task OnPostAsync()
        {
          this.CheckMessage = "Test"; // how to make this work
          return Page();
        }

Pregunta hecha hace 3 años, 5 meses, 0 días - Por algorithmadept


3 Respuestas:

  • Primero, necesitas usar data-ajax-update para actualizar la respuesta del servidor.

    Entonces, la respuesta del servidor no debe ser return Page(),esto le dará toda la página html, lo que usted quiere es sólo @Model.CheckMessage. Así que necesitas crear una vista parcial.

    Siga los siguientes pasos:

    • Crear una vista parcial llamada _Partial.cshtml()Nota: vista de cuchilla en lugar de páginas de cuchilla) en Pages/Shared carpeta:

      @model IndexModel
      @Model.CheckMessage
      
    • Cambia tus páginas de afeitar como abajo:

                           //add data-ajax-url and data-ajax-update.....
      
      //change class to id.... Result
      @section scripts{ }
    • Backend:

      [Required]
      [BindProperty]
      public string Code { get; set; }
      
      [ViewData]
      public string CheckMessage { get; set; }
      
      public async Task OnPostAsync()
      {
           this.CheckMessage = "Test"; 
           return new PartialViewResult
           {
               ViewName = "_Partial",
               ViewData = this.ViewData
           };
      }
      

    Resultado:

    enter image description here

    Respondida el Dec 16, 2020 a las 20:56 - por algorithmadept

    Votos positivos: 0 | Votos negativos: 0

  • Para lograr que el mensaje de estado se actualice en la página después de hacer una llamada AJAX de forma inobtrusiva, puedes utilizar la función success de jQuery para manipular el DOM y actualizar la parte de la página que contiene el mensaje.

    Aquí te dejo un ejemplo de cómo modificar tu código para lograr esto:

    • Agrega un identificador único a la etiqueta `
      ` que contiene el mensaje de estado. Por ejemplo, puedes agregarle el id "messageContainer" a la etiqueta `
      `:
    html
    
    Result @Model.CheckMessage
    • En tu script JavaScript, utiliza la función `success` de jQuery para actualizar el contenido del mensaje después de que la llamada AJAX sea exitosa. Agrega el siguiente código justo debajo de la sección `
    html
    
    
    • En tu código de backend, simplemente devuelve un JsonResult en lugar de una PageResult para que puedas enviar los datos que necesitas para actualizar la vista. Modifica tu método `OnPostAsync` de la siguiente manera:
    csharp
    public async Task OnPostAsync()
    {
        this.CheckMessage = "Test";
        return new JsonResult(new { CheckMessage = this.CheckMessage });
    }
    

    Con estos cambios, cada vez que envíes el formulario, se realizará una llamada AJAX y el mensaje de estado se actualizará en la parte de la página sin necesidad de recargarla por completo.

    Respondida el Dec 17, 2020 a las 20:57 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para actualizar parte de la página después de una llamada AJAX discreta en Razor Pages, puede utilizar la función $.ajax() de jQuery con la opción updateTargetId. Esta opción le permite especificar el ID del elemento HTML que se debe actualizar con la respuesta del servidor.

    Aquí tienes un ejemplo modificado de tu código:

    Parte HTML

    html
    
    Result @Model.CheckMessage

    Parte de JavaScript

    javascript
    $(document).ready(function () {
        $("form").submit(function (e) {
            e.preventDefault();
    
            $.ajax({
                type: "POST",
                url: $(this).attr("action"),
                data: $(this).serialize(),
                success: function (data) {
                    $("check-message").html(data.checkMessage);            }
            });
        });
    });
    

    Parte de backend

    No es necesario realizar cambios en la parte de backend.

    Este código actualizado utiliza jQuery para enviar los datos del formulario mediante una llamada AJAX y actualiza el elemento HTML con el ID "check-message" con la respuesta del servidor. La propiedad CheckMessage del modelo se devuelve en la respuesta del servidor y se actualiza en la página.

    Respondida el Dec 17, 2020 a las 20:57 - por Gemini

    Votos positivos: 0 | Votos negativos: 0