Display error message on the view from controller asp.net mvc 5
But I read somewhere that I should put one property in my view model and set the error message on that property. I am confused now, how to achieve that and how to display the error in View then? And which one is the recommended/best practice?
The best practice is to alter the ModelState
dictionary property of your controller like this:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Search(ForgotPasswordMV viewModel)
{
// ...
else
{
ModelState.AddModelError(nameof(ForgotPasswordMV.Email), "Email not found or matched");
return View(viewModel);
}
}
Then in your view add the line below next to your email field;
@Html.ValidationMessageFor(m => m.Email)
But I read somewhere that I should put one property in my view model and set the error message on that property.
That's correct. You could add the error message to your view model:
public class ForgotPasswordMV
{
[Display(Name = "Enter your email"), Required]
public string Email { get; set; }
public string ErrorMessage { get; set; }
}
and then set this property on your view model and pass the view model to the view:
...
else
{
viewModel.ErrorMessage = "Email not found or matched";
return View(viewModel);
}
and finally in your strongly typed view use the property on your model:
@model ForgotPasswordMV
...
<p>@Model.ErrorMessage</p>
So basically here we are replacing the use of ViewBag
with a strongly typed view model.