So, im currently building an application that needs the user model validating, and if the incorrect properties are filled in to the user it will tell them. I have the data annotations set up, but im not sure how i relay the error message back to the user? I have this set up so far on my model and view.
Model
public class DatabaseModel
{
[Required(ErrorMessage = ("A first name is required"))]
public string FirstName { get; set; }
[Required(ErrorMessage = ("A last name is required"))]
public string LastName { get; set; }
[Required(ErrorMessage = ("A valid role is required"))]
public string Role { get; set; }
// TODO - Validate rank to only b 1 - 10
//
[Range(1,10, ErrorMessage = ("A rank between 1 and 10 is required"))]
public int Rank { get; set; }
}
And View
@model RoleCreatorAndEditor.Models.DatabaseModel
@{
ViewData["Title"] = "Index";
}
<h2>User Information</h2>
<p>This is your user information!</p>
@using (Html.BeginForm("Index", "Home", FormMethod.Post)) {
@Html.Label("First Name")
<br>
@Html.TextBoxFor(m => m.FirstName)
<br>
@Html.Label("Last Name")
<br>
@Html.TextBoxFor(m=>m.LastName)
<br>
@Html.Label("Role")
<br>
@Html.TextBoxFor(m => m.Role)
<br>
@Html.Label("Rank")
<br>
@Html.TextBoxFor(m => m.Rank)
<br><br>
<input type="submit" value="Save">
}
My Controller
public class HomeController : Controller
{
// GET: Home
[HttpGet]
public ActionResult Index()
{
DatabaseModel model = new DatabaseModel();
return View(model);
}
[HttpPost]
public ActionResult Index(DatabaseModel model)
{
if (ModelState.IsValid)
{
ListToDatatable convert = new ListToDatatable();
DataTable user = convert.Convert(model);
DatabaseRepository dbRepo = new DatabaseRepository();
dbRepo.Upload(user);
}
return View();
}
}
I believe the model needs to be passed back to the view in order to display the error message, and although i have read through the documentation on asp.net i cannot understand how they just add the error message and the form knows how to display the errors to the user.
I am extremely confused.
You need to use
ModelState.IsValid
in your Controller and also@Html.ValidationMessageFor(model => model.FirstName)
in your view:For your example:
Controller: