Solución:
Pero leí en alguna parte que debería poner una propiedad en mi modelo de vista y establecer el mensaje de error en esa propiedad. Estoy confundido ahora, ¿cómo lograr eso y cómo mostrar el error en Ver entonces? ¿Y cuál es la mejor práctica recomendada?
La mejor práctica es alterar la ModelState
propiedad de diccionario de su controlador de esta manera:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Search(ForgotPasswordMV viewModel)
{
// ...
else
{
ModelState.AddModelError("Email", "Email not found or matched");
return View(viewModel);
}
}
Luego, en su vista, agregue la línea a continuación al lado de su campo de correo electrónico;
@Html.ValidationMessageFor(m => m.Email)
Pero leí en alguna parte que debería poner una propiedad en mi modelo de vista y establecer el mensaje de error en esa propiedad.
Eso es correcto. Puede agregar el mensaje de error a su modelo de vista:
public class ForgotPasswordMV
{
[Display(Name = "Enter your email"), Required]
public string Email { get; set; }
public string ErrorMessage { get; set; }
}
y luego establezca esta propiedad en su modelo de vista y pase el modelo de vista a la vista:
...
else
{
viewModel.ErrorMessage = "Email not found or matched";
return View(viewModel);
}
y finalmente en su vista fuertemente tipada use la propiedad en su modelo:
@model ForgotPasswordMV
...
<p>@Model.ErrorMessage</p>
Básicamente, aquí estamos reemplazando el uso de ViewBag
con un modelo de vista fuertemente tipado.
Si alguien está buscando una solución simple y NADA PERMANENTE, no dude en usar esta respuesta, ya que me ayudó. NO use esta solución si tiene que preocuparse por la seguridad dentro de su aplicación.
En tu controlador:
TempData["Message"] = "This is my Error";
En su archivo Error.cshtml:
<h3><strong>@TempData["Message"]</strong></h3>
Resultado: