I have a model class, which I am using to create the form
Public Class Users
Public Property Id As Integer
Public Property UserName As String
Public Property UserNin As Int16
Public Property UserType As String
Public Property Password As String
Property UserTypes As IEnumerable(Of SelectListItem) = {
New SelectListItem With {.Value = "admin", .Text = "Admin"},
New SelectListItem With {.Value = "doctor", .Text = "Doctor"},
New SelectListItem With {.Value = "reception", .Text = "Receptionist"}
}
End Class
My View class, using the above ViewModel to generate form utilising HTML Helpers
<% Using (Html.BeginForm("Create", "User", FormMethod.Post))%>
<table>
<tr>
<td>
User Name
</td>
</tr>
<tr>
<td>
<%= Html.TextBoxFor(Function(x) x.UserName)%>
</td>
</tr>
<tr>
<td>
User NIN
</td>
</tr>
<tr>
<td>
<%= Html.TextBoxFor(Function(x) x.UserNin)%>
</td>
</tr>
<tr>
<td>
Password
</td>
</tr>
<tr>
<td>
<%= Html.PasswordFor(Function(x) x.Password)%>
</td>
</tr>
<tr>
<td>
<%= Html.DropDownListFor(Function(x) x.UserType, Model.UserTypes)%>
</td>
</tr>
<tr>
<td>
<input type="submit" value="Add New User" />
</td>
</tr>
</table>
<% End Using%>
Now what is the best way to add validation to this case?
Update:
Here is what I have tried in another case, but still I dont see any validation, the action is called and processes.
Here is my model class
Public Class LoginUser
<Required()>
Public Property UserName As String
<Required()>
<StringLength(8)>
Public Property Password As String
End Class
This is the partial View
<% Using (Html.BeginForm("Login", "User", FormMethod.Post))%>
<% Html.EnableClientValidation()%>
<table ID="loginTable" runat="server">
<tr>
<td>
<label for="username">UserName</label>
</td>
</tr>
<tr>
<td>
<%= Html.TextBoxFor(Function(x) x.UserName)%>
<%= Html.ValidationMessageFor(Function(x) x.UserName) %>
</td>
</tr>
<tr>
<td>
<label for="password">Password</label>
</td>
</tr>
<tr>
<td>
<%= Html.TextBoxFor(Function(x) x.Password)%>
<%= Html.ValidationMessageFor(Function(x) x.Password)%>
</td>
</tr>
<tr>
<td>
<input type="submit" value="Login" />
</td>
</tr>
</table>
<% End Using%>
Login Action
<HttpPost()>
Function Login() As ActionResult
If ModelState.IsValid Then
Dim sql As String
Dim username As String = Request.Form("username").ToString
Dim password As String = Request.Form("password").ToString
Dim dbHelper As New DBHelper(False)
sql = "SELECT * FROM " & _tblName & " WHERE username = '" & username & "' and password = '" & password & "'"
Try
Dim dr As DataRow = dbHelper.ExecuteAndGetRow(sql)
If Convert.ToInt16(dr.Item(0).ToString) > 0 Then
Dim nin As String = dr.Item(4)
Session("loggedin") = 1
Session("logged") = dr.Item(0)
Session("logged_nin") = dr.Item(4)
ViewData("message") = "Login Successful"
ViewData("show_loginForm") = False
Else
ViewData("message") = "Login failed"
ViewData("show_loginForm") = True
End If
Catch ex As Exception
ViewData("message") = "Login failed"
ViewData("show_loginForm") = True
End Try
Return View()
Else
Return View()
End If
End Function
You could use data annotations. For example if the
UserNamefield was required you decorate it with the<Required>attribute:and inside the view you put a corresponding placeholder for the error message:
or if you wanted to centralize all error messages in a single place you could use the ValidationSummary helper:
And inside the POST controller action you could verify if the model is valid using
ModelState.IsValidboolean property:And here’s an article on MSDN which explains this as well.