I have a simple strongly-typed view.
@model GoldForGold.Models.LogonModel
@{
ViewBag.Title = \"Logins\";
Layout = \"~/Views/Shared/_Layout.cshtml\";
Here is the complete solution:
Add the following scripts to your view:
<script src='@Url.Content("~/Scripts/jquery-1.8.2.js")' type='text/javascript'></script>
<script src='@Url.Content("~/Scripts/jquery.validate.js")' type='text/javascript'> </script>
<script src='@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")' type='text/javascript'></script>
Enable Validation in Web.Config:
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
Add validation element in the view:
@Html.ValidationMessageFor(model => model.UserName)
Add Required attribute to you model`s element.
[Required(ErrorMessage="please enter username")]
public string UserName { get; set; }
For client side validation you need jquery and jquery validation.
after that client side validation must be enabled in config:
<appSettings>
...
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
for server side validation you can check your validation state with:
ModelState.IsValid;
My fix for my problem was to use this line of code in the model class.
using System.ComponentModel.DataAnnotations;
be aware that there is another namespace (Microsoft.Build.Framework) that also supports [Required] annotation.
One other thing to be wary of with [Required]
is when using it on an integer field, not just when storing a numeric value, but also, say, when storing the id of the selected value of a dropdown/select list.
[Required]
won't work in that situation because an integer property can never be null and so always has a default value of zero. [Required]
is checking that the property has a value, and zero is considered a value, so the check will pass.
In that case either declare the property as a nullable integer instead:
[Required]
public int? LanguageId { get; set; } // note the int is now nullable
or alternatively use the Range
attribute to stop zero being an acceptable value:
[Range(1, int.MaxValue)]
public int LanguageId { get; set; }
1- Add the scripts to view:
<script src='@Url.Content("~/Scripts/jquery-1.8.2.js")' type='text/javascript'></script>
<script src='@Url.Content("~/Scripts/jquery.validate.js")' type='text/javascript'>
</script>
<script src='@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")' type='text/javascript'></script>
2- Enable Validation in Web.Config:
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
3- Add validation html helper in the view:
@Html.ValidationMessageFor(model => model.UserName)
4- Add Required attribute to your model`s element:
[Required(ErrorMessage="please enter username")]
public string UserName { get; set; }
For the record, you can include the following code at the end of your view, to make sure that the [Required]
attribute pops up in the user interface:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}