2011-03-04 43 views

Respuesta

2

Use ViewData para almacenar los mensajes de éxito. Cree el mensaje de éxito en el Controlador y verifíquelo en la Vista. Si existe, renderízalo.

12

en su controlador, puede hacer esto:

ViewData["Message"] = "Success" 

y en su vista en la que se puede comprobar si hay un mensaje para mostrar, y si es así que mostrarlo:

@if (ViewData["Message"] != null) 
    <div>success</div> 
+11

¿No tendría más sentido mostrar realmente el mensaje almacenado en lugar de uno completamente diferente? – Kehlan

0

Tengo una tendencia a almacenar mis errores y éxitos en la misma matriz/objeto y pasarlos a la vista.

Dado que la mayoría de mi mensaje de error/éxito aparecería en el mismo lugar y generalmente no ocurren al mismo tiempo, esto no suele ser un problema.

Tengo una función llamada ShowFeedback() que se llama como usercontrol y hace la lógica para determinar qué mostrar. Los errores y éxitos se marcan igual en HTML y solo el css difiere un poco. Lo que podría tener

<div id="feedback" class="error"> 
    Your error message 
</div> 

o

<div id="feedback" class="success"> 
    Your success message 
</div> 
16

Si está mostrando un mensaje en una página diferente que ViewData no le ayudará, ya que se reinicializa con cada solicitud. Por otro lado, TempData puede almacenar datos para dos solicitudes. He aquí un ejemplo:

public ActionResult SomeAction(SomeModel someModel) 
     { 
      if (ModelState.IsValid) 
      { 
       //do something 
       TempData["Success"] = "Success message text."; 
       return RedirectToAction("Index"); 
      } 
      else 
      { 
       ViewData["Error"] = "Error message text."; 
       return View(someModel); 
      } 
     } 

Dentro if bloque debe utilizar TempData porque estás haciendo redirección (otra solicitud), pero dentro de lo contrario puede utilizar ViewData.

Y dentro de ver que podría tener algo como esto:

@if (ViewData["Error"] != null) 
{ 
    <div class="red"> 
     <p><strong>Error:</strong> @ViewData["Error"].ToString()</p> 
    </div> 
} 
@if (TempData["Success"] != null) 
{ 
    <div class="green"> 
     <p><strong>Success:</strong> @TempData["Success"].ToString()</p> 
    </div> 
} 
+0

Realmente no hay necesidad de volver a implementar el manejo de errores, ya que ya está incorporado a través de ModelState.AddModelError(). Además de escribir menos código, obtienes un mejor control sobre dónde quieres que aparezcan exactamente tus errores de validación (Html.ValidationSummary() y Html.ValidationMessageFor()). Además, el uso de marcos de validación/complementos se vuelve más fácil de conectar porque también se adhieren al estándar de ModelState. –

+5

@Daniel Estoy de acuerdo, pero la pregunta era sobre el mensaje de éxito no el error de validación;) – frennky

+0

Recomiendo este tipo de vista de mensaje en la página maestra. – qub1n

1

TempData se puede utilizar como un diccionario. Cada valor guardado es válido para la solicitud actual y la siguiente. Perfecto para redirecciones.

this.TempData["messages"] = "Success!"; 
return RedirectToAction("YourAction"); 
Cuestiones relacionadas