2011-01-13 76 views
11

Aquí está un ejemplo de método Tengo que elimina un registro de mi aplicación:ASP.NET MVC Mostrar mensaje de éxito

[Authorize(Roles = "news-admin")] 
public ActionResult Delete(int id) 
{ 
    var ArticleToDelete = (from a in _db.ArticleSet where a.storyId == id select a).FirstOrDefault(); 
    _db.DeleteObject(ArticleToDelete); 
    _db.SaveChanges(); 

    return RedirectToAction("Index"); 
} 

Lo que me gustaría hacer es mostrar un mensaje en la vista de índices que dice algo como : "El artículo de Lorem ipsum ha sido eliminado" ¿cómo podría hacer esto? Gracias

Aquí es mi método de índice actual, por si acaso:

// INDEX 
    [HandleError] 
    public ActionResult Index(string query, int? page) 
    { 
     // build the query 
     var ArticleQuery = from a in _db.ArticleSet select a; 
     // check if their is a query 
     if (!string.IsNullOrEmpty(query)) 
     { 
      ArticleQuery = ArticleQuery.Where(a => a.headline.Contains(query)); 
      //msp 2011-01-13 You need to send the query string to the View using ViewData 
      ViewData["query"] = query; 
     } 
     // orders the articles by newest first 
     var OrderedArticles = ArticleQuery.OrderByDescending(a => a.posted); 
     // takes the ordered articles and paginates them using the PaginatedList class with 4 per page 
     var PaginatedArticles = new PaginatedList<Article>(OrderedArticles, page ?? 0, 4); 
     // return the paginated articles to the view 
     return View(PaginatedArticles); 
    } 
+0

he creado un paquete de Nuget que ayuda con el envío de mensajes (error, advertencia, información y el éxito) desde el controlador para ver que es Bootstrap listo: https://www.nuget.org/packages/BootstrapNotifications/ –

Respuesta

18

Una forma sería utilizar TempData:

[Authorize(Roles = "news-admin")] 
public ActionResult Delete(int id) 
{ 
    var ArticleToDelete = (from a in _db.ArticleSet where a.storyId == id select a).FirstOrDefault(); 
    _db.DeleteObject(ArticleToDelete); 
    _db.SaveChanges(); 
    TempData["message"] = ""Lorem ipsum article has been deleted"; 
    return RedirectToAction("Index"); 
} 

y dentro de la acción Index que podría traer este mensaje de TempData y hacer uso de eso. Por ejemplo, podría pasarlo como una propiedad de nuestro modelo de vista que se pasará a la vista para que se pueda demostrar que:

public ActionResult Index() 
{ 
    var message = TempData["message"]; 
    // TODO: do something with the message like pass to the view 
} 

ACTUALIZACIÓN:

Ejemplo:

public class MyViewModel 
{ 
    public string Message { get; set; } 
} 

y luego:

public ActionResult Index() 
{ 
    var model = new MyViewModel 
    { 
     Message = TempData["message"] as string; 
    }; 
    return View(model); 
} 

y en el interior de la vista inflexible:

<div><%: Model.Message %></div> 
+0

Okay suena interesante. 1.) ¿Cómo lo paso a la Vista? 2.) ¿Cómo lo muestro en la Vista? Gracias :) – Cameron

+0

Define un ViewModel con una propiedad de cadena que se asignará a este mensaje. A continuación, escriba su vista en este modelo de vista y dentro de la vista simplemente use '<%: Model.Message%>'. O haces algo muy feo dentro de la acción del controlador 'ViewData [" message "] = message;' y dentro de la vista: '<%: ViewData [" message "]%>' (Repito que esto es feo y no lo hago) lo recomiendo, ViewData simplemente apesta). –

+0

No entiendo muy bien ViewModel y lo escribo con fuerza. ¿Podría mostrar un ejemplo en el código de arriba? Gracias. – Cameron

Cuestiones relacionadas