c# - Form model not validating before POST -


i'm trying make registration page in web application. however, validation on form not working. example have password minimum length 4 charterers if enter blank password still makes post request. how tell form model not valid , should change password,email, etc?

accountcontroller.cs

[httppost] public actionresult register(registermodel model){     if (modelstate.isvalid){         // insert database     }     // there error     return view(model); } 

registermodel.cs

public class registermodel {      [required]     [display(name = "username")]     public string username { get; set; }      [required]     [emailaddress]     [display(name = "email")]     public string email { get; set; }      [required]     [stringlength(100, errormessage = "the {0} must @ least {2} , @ max {1} characters long.", minimumlength = 4)]     [datatype(datatype.password)]     [display(name = "password")]     public string password { get; set; }      [datatype(datatype.password)]     [display(name = "confirm password")]     [compare("password", errormessage = "the password , confirmation password not match.")]     public string confirmpassword { get; set; } } 

register.cshtml

@model registermodel     <form asp-controller="account" asp-action="register" asp-route-returnurl="@viewdata["returnurl"]" method="post" class="form-horizontal">         <h4>create new account.</h4>         <hr />         <div asp-validation-summary="all" class="text-danger"></div>         <div class="form-group">             <label asp-for="username" class="col-md-2 control-label"></label>             <div class="col-md-10">                 <input asp-for="username" class="form-control" />                 <span asp-validation-for="username" class="text-danger"></span>             </div>         </div>         <div class="form-group">             <label asp-for="email" class="col-md-2 control-label"></label>             <div class="col-md-10">                 <input asp-for="email" class="form-control" />                 <span asp-validation-for="email" class="text-danger"></span>             </div>         </div>         <div class="form-group">             <label asp-for="password" class="col-md-2 control-label"></label>             <div class="col-md-10">                 <input asp-for="password" class="form-control" />                 <span asp-validation-for="password" class="text-danger"></span>             </div>         </div>         <div class="form-group">             <label asp-for="confirmpassword" class="col-md-2 control-label"></label>             <div class="col-md-10">                 <input asp-for="confirmpassword" class="form-control" />                 <span asp-validation-for="confirmpassword" class="text-danger"></span>             </div>         </div>         <div class="form-group">             <div class="col-md-offset-2 col-md-10">                 <button type="submit" class="btn btn-default">register</button>             </div>         </div>     </form> 

soultion since register page under home controller, , register logic in account controller had define the view load register.cshtml page.

[httppost] public actionresult register(registermodel model){     if (modelstate.isvalid){         // insert database     }     // there error     return view("~/views/home/register.cshtml",model) } 

when click on submit button, posts form server action method has code check whether form valid ( modelstate.isvalid). server side validation. form has posted server happen.

if want validation happen @ client side (and not submit form if validation fails), need make sure have relevant javascript libraries/files loaded page.

  1. jquery.validate.js
  2. jquery.validate.unobtrusive.js

you may include in layout file or specific view. if specific view, make sure include in scrips section.

@section scripts {  <script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>  <script src="~/lib/jquery-validation- unobtrusive/jquery.validate.unobtrusive.js"></script> } 

update path of files match have files in project. may use location public cdn.


Comments