Pregunta

Estoy escribiendo una sencilla plataforma de blogs con ASP.NET MVC. Mi pregunta es con respecto a las formas contenidas en vistas parciales y gastos de la respuesta, errores de validación o el éxito, desde el controlador.

Tengo una vista del elemento de entrada de blog que tiene un controlador asociado que devuelve un mensaje de una determinada URL. Incrustado en este punto de vista es una vista parcial que contiene una forma para presentar comentarios en el poste. La forma vista parcial somete a un controlador separado que se encarga de la adición de comentarios. Dentro de la acción Agregar comentario que realiza la validación de errores y añadir al objeto ModelState.

El problema es que tengo que devolver un RedirectResult en la acción de la vista parcial, de modo que el usuario se devuelve al punto postal de origen, lo que significa que pierdo el objeto ModelState o cualquier mensaje de éxito que desea devolver.

la gente

que he visto mencionan el uso de TempData a pasar la validación o información de éxito volver a la vista original, pero para mí esto suena un poco hacker. ¿Es realmente la solución? Si es así ¿alguien puede recomendar un buen ejemplo de su uso? Si no es así, se trata de una muestra de los problemas más grandes en mi arquitectura elegida?

¿Fue útil?

Solución

He utilizado el patrón PRG en el pasado darle una oportunidad

patrón de uso para la modificación de datos PRG

Otros consejos

Puede tener la acción Agregar comentario llamar a la acción de la vista posterior ...

Algo como esto supongo:

public class PostController
{
    ... blah ...

    public ActionResult ViewPost(int postId)
    {
        Post post = PostRepository.GetPost(postId);
        return View("ViewPost", post);
    }

    public ActionResult AddComment(int postId, string comment, string otherInfo)
    {
        //Validate stuff, setting modelstate etc

        //If it isn't valid, return the same post view (modelstate will stay)
        if (!ModelState.IsValid)
            return this.ViewPost(postId);

        //If it is valid then we want to save it and follow PRG pattern
        PostRepository.Save(newValidComment);
        TempData["Message"] = "Thanks for your comment!";
        return RedirectToAction("ViewPost", new {id = postId});
    }
}

o una variación del mismo concepto ...

HTHS, España Charles

¿Ha considerado el uso de las bibliotecas Ajax sólo publicar esa zona de la página? De esa manera no tendría que volver a dirigir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top