ASP.NET MVC Multiple forms on one page: validation does not work

I create a register registration page in asp mvc and, as I need it, this page has two models and two form actions. everything is fine, but check. models:

public class Account_Index_ViewModel { public UserAccount_Login_ViewModel userAccount_Login_ViewModel { get; set; } public UserAccount_Register_ViewModel userAccount_Register_ViewModel { get; set; } } public class UserAccount_Login_ViewModel { [Required] [DataType(DataType.Password)] public string Pass { get; set; } [Required] public string LoginName { get; set; } // NickName/Email/MobilePhone } public class UserAccount_Register_ViewModel { public string NickName { get; set; } public string Passw { get; set; } public string PassConfirm { get; set; } public string Email { get; set; } public string MobilePhone { get; set; } } 

and view:

 @model GhafasehWebSite.Models.Account_Index_ViewModel @{ ViewBag.Title = "Index"; } <h2>Index</h2> <div class="AccountBook"> <div class="half-width"> @using (Html.BeginForm("Login", "Account")) { Html.EnableClientValidation(); @Html.AntiForgeryToken() <div class="form-horizontal"> <h4>ورود به سیستم</h4> <hr /> @Html.ValidationSummary(true) <div class="form-group col-md-12"> @Html.LabelFor(model => ((GhafasehWebAPI.Models.UserAccount_Login_ViewModel)(model.userAccount_Login_ViewModel)).LoginName, new { @class = "control-label col-md-4" }) <div class="col-md-8"> @Html.TextBoxFor(model => ((GhafasehWebAPI.Models.UserAccount_Login_ViewModel)(model.userAccount_Login_ViewModel)).LoginName, new { @class = "form-control", placeholder = "نام مستعار/ایمیل/شماره موبایل" }) @Html.ValidationMessageFor(model => ((GhafasehWebAPI.Models.UserAccount_Login_ViewModel)(model.userAccount_Login_ViewModel)).LoginName) </div> </div> <div class="form-group col-md-12"> @Html.LabelFor(model => ((GhafasehWebAPI.Models.UserAccount_Login_ViewModel)(model.userAccount_Login_ViewModel)).Pass, new { @class = "control-label col-md-4" }) <div class="col-md-8"> @Html.TextBoxFor(model => ((GhafasehWebAPI.Models.UserAccount_Login_ViewModel)(model.userAccount_Login_ViewModel)).Pass, new { @class = "form-control" }) @Html.ValidationMessageFor(model => ((GhafasehWebAPI.Models.UserAccount_Login_ViewModel)(model.userAccount_Login_ViewModel)).Pass) </div> </div> <div class="form-group"> <div class="col-md-offset-4 col-md-10"> <input type="submit" value="ورود" class="btn btn-primary" /> </div> </div> </div> } </div> <div class="half-width"> @using (Html.BeginForm("Register","Account")) { @Html.AntiForgeryToken() <div class="form-horizontal"> <h4>ثبت نام در سیستم</h4> <hr /> @Html.ValidationSummary(true) <div class="form-group col-md-12"> @Html.LabelFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).NickName, new { @class = "control-label col-md-4" }) <div class=" col-md-8"> @Html.TextBoxFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).NickName, new { @class = "form-control" }) @Html.ValidationMessageFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).NickName) </div> </div> <div class="form-group col-md-12"> @Html.LabelFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).Passw, new { @class = "control-label col-md-4" }) <div class=" col-md-8"> @Html.TextBoxFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).Passw, new { @class = "form-control" }) @Html.ValidationMessageFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).Passw) </div> </div> <div class="form-group col-md-12"> @Html.LabelFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).PassConfirm, new { @class = "control-label col-md-4" }) <div class=" col-md-8"> @Html.TextBoxFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).PassConfirm, new { @class = "form-control" }) @Html.ValidationMessageFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).PassConfirm) </div> </div> <div class="form-group col-md-12"> @Html.LabelFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).Email, new { @class = "control-label col-md-4" }) <div class=" col-md-8"> @Html.TextBoxFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).Email, new { @class = "form-control" }) @Html.ValidationMessageFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).Email) </div> </div> <div class="form-group col-md-12"> @Html.LabelFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).MobilePhone, new { @class = "control-label col-md-4" }) <div class=" col-md-8"> @Html.TextBoxFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).MobilePhone, new { @class = "form-control" }) @Html.ValidationMessageFor(model => ((GhafasehWebAPI.Models.UserAccount_Register_ViewModel)model.userAccount_Register_ViewModel).MobilePhone) </div> </div> <div class="form-group"> <div class="col-md-offset-4 col-md-10"> <input type="submit" value="ثبت نام" class="btn btn-success" /> </div> </div> </div> } </div> </div> <div> @Html.ActionLink("Back to List", "Index") </div> @section Scripts { @Scripts.Render("~/bundles/jqueryval") } 

and controller:

  [HttpGet] public ActionResult Index() { return View(new Account_Index_ViewModel()); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(UserAccount_Login_ViewModel model) { if (ModelState.IsValid) { if (DataProvider.LoginUser(model, ModelState, Request, Session)) { return RedirectToAction("Index", "Home"); } } return View("Index"); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Register(UserAccount_Register_ViewModel model) { if (ModelState.IsValid) { if (DataProvider.RegisterUser(model, ModelState, Request, Session)) { return RedirectToAction("Index", "Home"); } } return View("Index"); } 

You should know that the server side check is working fine, but the client side is sleeping. So what do you suggest?

+1
source share
1 answer

When you say that validation does not work, what do you mean? will you press the login button with an empty username / password and you will not see the required error? If so, I created a new project with your model controller and it works! Validation works.

+1
source

Source: https://habr.com/ru/post/1272287/


All Articles