There will be a layout file (_Layout.cshtml
) to define the layout structure of your web application. As JavaScript libraries are going to be used in all the pages, this is the right place to add common functionalities such as unobtrusive validation. Just add the JavaScript libraries (highlighted in bold) to the layout file (_Layout.cshtml
) so that they will be available for all the View
files:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
</head>
<body>
<div>
@RenderBody()
</div>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.2.3.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/mvc/5.2.3/jquery.validate.unobtrusive.min.js"></script>
</body>
</html>
There is no change to the View model except for the removal of the JavaScript function we wrote earlier for validating the fields. The complete code for the view is as following:
@model Validation.ViewModels.EmployeeAddViewModel <div> <form asp-controller="Employee" asp-action="Index" method="post" role="form"> <table> <tr> <td><label asp-for="Name"></label></td> <td><input asp-for="Name" /></td> <td><span id="validationName" asp-validation-for="Name" style="color:red"></span></td> </tr> <tr> <td><label asp-for="Designation"></label> </td> <td><input asp-for="Designation" /></td> <td><span id="validationDesignation" asp-validation-for="Designation" style="color:red"></span> </td> </tr> <tr> <td><label asp-for="Salary"></label></td> <td><input asp-for="Salary"></td> <td> <span id="validationSalary" asp-validation-for="Salary" style="color:red"></span> </td> </tr> <tr> <td colspan="2"><input type="submit" id="submitbutton" value="Submit" /></td> </tr> </table> </form> </div> <br /><br /> <br /> <b> List of employees:</b> <br /> <div> <table border="1"> <tr> <th> ID </th> <th> Name </th> <th> Designation </th> <th> Salary </th> </tr> @foreach (var employee in Model.EmployeesList) { <tr> <td>@employee.EmployeeId</td> <td>@employee.Name</td> <td>@employee.Designation</td> <td>@employee.Salary</td> </tr> } </table> </div>
The preceding diagram depicts the unobtrusive client validation process:
Model
/ViewModels
.Model
/ViewModels
and generates the HTML.data-*
attributes:Required
attribute is set, the data-val-required
attribute is created with the error message as its value.MinLength
Data Annotation attribute, the data-val-minlength
attribute is set with the error message as its value.data-val-range
attribute is set with the error message as its value. The data-val-range-max
represents the maximum value in the range and the data-val-range-min
attribute represents the minimum value in the range.data-*
attributes and does the client-side validation. This allows the developer to not write the separation validation code using JavaScript as everything is resolved by the configuration itself.