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.
- jquery.validate.js
- 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
Post a Comment