asp.net-mvc – 验证在部分视图中不起作用
发布时间:2020-12-16 07:00:25 所属栏目:asp.Net 来源:网络整理
导读:我有一个索引页面,它有两个部分视图:登录和注册.我正在使用数据模型验证. Login.cshtml @model Project.ViewModel.UserModeldiv style="position:inherit;"@using (Html.BeginForm("_Login","account")){ @Html.ValidationSummary(true) div class="label"@
我有一个索引页面,它有两个部分视图:登录和注册.我正在使用数据模型验证.
Login.cshtml @model Project.ViewModel.UserModel <div style="position:inherit;"> @using (Html.BeginForm("_Login","account")) { @Html.ValidationSummary(true) <div class="label">@Html.Label("Username")</div> <div class="field">@Html.TextBoxFor(m => m.Username)</div> <div class="error">@Html.ValidationMessageFor(model => model.Username)</div> <div class="label">@Html.Label("Password")</div> <div class="field">@Html.PasswordFor(m => m.Password)</div> <div class="error">@Html.ValidationMessageFor(model => model.Password)</div> <input class="field" id="submit" type="submit" value="Login" /> } Register.cshtml @model Project.ViewModel.UserModel <link href="~/Content/Site.css" rel="stylesheet" /> <div style="position: inherit; margin-top: 20px"> @using (Html.BeginForm("_Register","account")) { <div class="label">@Html.Label("Name")</div> <div class="field">@Html.TextBoxFor(m => m.FullName)</div> <div class="error">@Html.ValidationMessageFor(model => model.FullName)</div> <div class="label">@Html.Label("Username")</div> <div class="field">@Html.TextBoxFor(m => m.Username)</div> <div class="error">@Html.ValidationMessageFor(model => model.Username)</div> <div class="label">@Html.Label("Password")</div> <div class="field">@Html.PasswordFor(m => m.Password)</div> <div class="error">@Html.ValidationMessageFor(model => model.Password)</div> <div class="label">@Html.Label("Confirm Password")</div> <div class="field">@Html.PasswordFor(m => m.ConfirmPassword)</div> <div class="error">@Html.ValidationMessageFor(model => model.Password)</div> <div class="label">@Html.Label("Email")</div> <div class="field">@Html.TextBoxFor(m => m.Email)</div> <div class="error">@Html.ValidationMessageFor(model => model.Email)</div> <div class="label">@Html.Label("Country")</div> <div class="field">@Html.TextBoxFor(m => m.Country)</div> <div class="error">@Html.ValidationMessageFor(model => model.Email)</div> <input class="field" id="submit" type="submit" value="Sign Up" /> @Html.ValidationSummary() } Index.cshtml @model Project.ViewModel.UserModel @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } <div id="regiserandlogin"> <div id="registerandlogin-header"> <label style="margin-left:50px;">Sign Up For Free!!!</label> <label style="margin-left:350px;color:#28a1e2">Already Have An Account?</label> </div> <div id="registerbox"> @Html.Partial("_Register",new ProjectHub.ViewModel.UserModel()) </div> <div id="loginbox"> @Html.Partial("_Login",new ProjectHub.ViewModel.UserModel()) </div> public ViewResult _Register() { return View("_Register"); } [HttpPost] public ActionResult _Register(UserModel usermodel) { if (!ModelState.IsValid) { return View("Index"); } try { FormsAuthentication.SetAuthCookie(usermodel.Username,false); return RedirectToAction("activationemail",new {username= Username}); } catch (Exception ae) { ModelState.AddModelError("",ae.Message); return View(); } } public ViewResult _Login() { return View("_Login"); } [HttpPost] public ActionResult _Login(string username,string password) { if (ModelState.IsValid) { if (MembershipService.ValidateUser(username,password)) { if (!repository.IsVerified(username)) { ModelState.AddModelError("","Account is not activated.; return View(); } FormsAuthentication.SetAuthCookie(username,false); return RedirectToAction("Index","Home"); } return RedirectToAction("Index","account"); ; } else { ModelState.AddModelError("","Invalid Username/Password"); return View(); } } UserModel.cs using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace ProjectHub.ViewModel { public class UserModel { [Required(ErrorMessage="Username is Required")] public string Username { get; set; } [Required(ErrorMessage = "Password is Required")] public string Password { get; set; } [Required(ErrorMessage = "Password is Required")] public string ConfirmPassword { get; set; } [Required(ErrorMessage = "Name is Required")] public string FullName { get; set; } [Required(ErrorMessage = "Email is Required")] public string Email { get; set; } [Required(ErrorMessage = "Country is Required")] public string Country { get; set; } } } 当我按下这样的注册按钮时,我得到a validation error 如果我使用RedirectToAction方法,我没有得到验证错误. 解决方法
您不应对两个部分使用相同的视图模型.您应该有2种不同的视图模型.
例如: public class LoginViewModel { [Required(ErrorMessage="Username is Required")] public string Username { get; set; } [Required(ErrorMessage = "Password is Required")] public string Password { get; set; } } 对于寄存器部分: public class RegisterViewModel { [Required(ErrorMessage="Username is Required")] public string Username { get; set; } [Required(ErrorMessage = "Password is Required")] public string Password { get; set; } [Required(ErrorMessage = "Password is Required")] public string ConfirmPassword { get; set; } [Required(ErrorMessage = "Name is Required")] public string FullName { get; set; } [Required(ErrorMessage = "Email is Required")] public string Email { get; set; } [Required(ErrorMessage = "Country is Required")] public string Country { get; set; } } 然后你的主视图模型应该聚合这两个视图模型: public class MyViewModel { public LoginViewModel Login { get; set; } public LoginViewModel Register { get; set; } } 然后: <div id="registerbox"> @Html.Partial("_Register",Model.Login) </div> <div id="loginbox"> @Html.Partial("_Login",Model.Register) </div> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 在程序集中找不到上下文类型
- asp.net – 页面可以有多个ScriptManagers吗?如果是,则需要
- ASP.Net在页面中的页面/控件上调用Dispose,还是必须这样做?
- asp.net-mvc – UserManager.AddPasswordAsync()返回“Name
- asp.net – 如果缓存破坏程序与内容不匹配,防止捆绑包响应
- 白话ASP.NET MVC之三:Controller是如何解析出来的
- asp.net-mvc – ASP.NET MVC – 在控制器之间共享会话状态
- asp.net – 如何从vb.net中的日期时间中提取日期部分
- asp.net – Handler类代码没有触发
- Asp.net Identity 2.0更新用户
推荐文章
站长推荐
- asp.net-mvc – MVC3 – RenderSection中的Rende
- asp.net – 使用母版页在Aspx页面中引用CSS工作表
- asp.net – WebForms中的强类型容器
- 试图下载文件的100个并发用户(asp.net C#应用程序
- asp.net-core – 如何使.NET Core类库从.NET 4.6
- log4net 日志框架的配置
- asp.net-mvc-3 – 如何使razor成为现有项目中的默
- asp.net-mvc-3 – 使用jQuery验证货币字段的客户
- asp.net – 用于验证的数据注释,至少一个必填字段
- asp.net-mvc – 忽略viewstart在asp.net mvc raz
热点阅读