您的位置:首页 > 其它

MVC 数据验证(检查用户名是否存在)

2014-09-28 11:42 447 查看
在应用程序下的Models文件夹中添加----》新建项--》ADO.NET实体数据模型--》然后选择模型内容--》下一步后“选择您的数据库连接”。这里我选择的数据库是sales 。然后下一步,“选择数据库对象”你可以选择你要的表,或视图,在你要的表或视图前面打钩就可以了,这里我选择的是T_UserInfo表 。新建好之后找到salesModel.edmx

点击salesModel.edmx前面的那个小三角符号后,会在salesModel.edmx下面会显示出salesModel.edmx.Designer.cs文件。打开文件就可以看到

一个方法了: public partial class salesEntities : ObjectContext

其中salesEntities就是我们创建的这个ADO模型实体类。 (注意:我这里选择的是sales数据库。所以我的实体模型类的名字是 salesEntities。而你选择的不同数据库实体模型类名是不一样的。不过都是以*****Entities结尾的)

MVC 3数据验证

ASP.NET MVC 3 —— Model远程验证

MVC4数据注解和验证

RemoteAttribute 的使用问题 检查用户名是否存在

控制器 Home

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication2.Models;

namespace MvcApplication2.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {

            return View();
        }

        /// <summary>
        /// 检查用户名是否有重复
        /// </summary>
        /// <param name="userName">用户在页面(视图)表单中输入的UserName</param>
        /// <returns>Json</returns>
        public ActionResult CheckUserName(string userName)
        {
            bool result = false;
            using (var datas = new salesEntities())//创建一个ADO.NET实体模型。实体类模型类名称是salesEntities
            {
                var query = from userinfo in datas.T_UserInfo//用linq语句 查询实体模型类中T_UserInfo表
                            where userinfo.Name == userName
                            select new { Name= userinfo.Name };
                if (query == null || !query.Any())
                {
                    result = true;
                }
                          
            }
            
            return Json(result,JsonRequestBehavior.AllowGet);
        }

    }
}


Model(UserInfo)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

namespace MvcApplication2.Models
{
    /// <summary>
    ///  这些例子就是验证的,注意此处没有客户端验证,完全是服务器端验证的,如果出错,视图会渲染再次显示,非常好用啊,很方便啊,要在以前你要写多少行代码来搞定这些繁琐无味的验证呢?微软太体恤程序员了,顶一个。
    ///  在下面的例子当中,当数据发送到服务器验证不通过之后,则所有用户填写的内容在重新打开的页面后都清空了, 如果想不清空,即用户第一次填的内容还存在的话,可以return View(接受到的对象);
    /// </summary>
    public class UserInfo
    {
        public int Id { get; set; } //ID
        /// <summary>
        ///DisplayName:指定当前字段显示的名称
        ///StringLength:指定允许的长度,括号里的第一个参数是最大长度,第二个参数是最小长度。最后一个参数是指:单字段值的长度不符合第一第二参数规定时候,提示错误的内容
        ///Required:表示当前字段是必填选项,当提交的表单缺少该值就引发验证错误。括号里的AllowEmptyStrings是: 获取或设置一个值,该值指示是否允许空字符串。单值为false的时候表示当前字段的值不能为空
        ///Remote:允许利用服务器端的回调函数执行客户端的验证逻辑。说白了就是支持AJAX验证。括号里的CheckUserName是Action方法。Home是控制器 ,它会调用Home控制中的CheckUserName方法来查询你所输入的用户名是否已经存在,如果存在,则提示"用户名已经存在"      
        /// </summary>
        [DisplayName("用户名")]
        [Required(AllowEmptyStrings=false, ErrorMessage="用户名不能为空")]
        [StringLength(10, MinimumLength = 2, ErrorMessage = "用户名长度必须在{2}和{1}位之间")]
        [Remote("CheckUserName", "Home", ErrorMessage = "用户名已经存在")] 
        public string UserName { get; set; } //用户名
        
        [DisplayName("用户密码")]
        [DataType(DataType.Password)] //将密码已*号的形式来显示
        [Required(AllowEmptyStrings=false,ErrorMessage="密码不能为空")]
        [StringLength(12,MinimumLength=6,ErrorMessage="密码长度必须在{2}和{1}位之间")]
        public string UserPassword { get; set; } //用户密码

        [DataType(DataType.Password)]
        [Compare("UserPassword",ErrorMessage="密码不一致")]
        [DisplayName("请再次确认密码")]
        public string TUserPassword{get;set;}  //再次输出密码

        /// <summary>
        /// RegularExpression:表示当前字段的值要符合一个正则表达式。如果不能匹配,则报一个验证错误。ErrorMessage的内容就是验证错误的具体信息。
        /// </summary>
        [Display(Name = "邮箱")] //也可以写成  [DisplayName("邮箱")]
        [Required(AllowEmptyStrings=false,ErrorMessage="邮箱不能为空")]
        //[DataType(DataType.EmailAddress, ErrorMessage = "xxxxxxxx")] //其实也可以用以下的正则表达式来验证邮箱
        [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9]+\.[A-Za-z]{2,4}", ErrorMessage = "{0}的格式不正确")]
        public string Email { get; set; } //邮箱

        [DisplayName("请再次确认邮箱")]        
        [Compare("Email",ErrorMessage="两次输入的邮箱不一致")]
        //[DataType(DataType.EmailAddress, ErrorMessage = "请输入有效的邮箱地址")]
        public string TEmail { get; set; } //再次输入邮箱

        [DisplayName("***")]
        [RegularExpression(@"\d{17}[\d|x]|\d{15}", ErrorMessage = "***号码格式错误")]
        public string IdentityNo { get; set; } //***号

        /// <summary>
        /// Range:用来指定数值类型值的最小值和最大值。括号里的第一个数的“最小值”第二个参数是“最大值”
        /// </summary>
        [DisplayName("年龄")]
        [Required(AllowEmptyStrings=false,ErrorMessage="年龄不能为空")]
        [Range(10, 120, ErrorMessage = "您输入的年龄不符合规范,年龄应该在{1}-{2}之间")]
        public int Age { get; set; } //年龄

        /// <summary>
        /// DisplayFormat:用来处理属性的各种格式化选项。当属性包含空值时,可以提供可选的显示文本,也可以为包含标记的属性关闭HTML编码,还可以为运行时指定一个应用于属性值的格式化字符串。
        /// </summary>
        [DisplayName("金额")]
        [DataType(DataType.Currency)] //Currency:表示货币值
        [DisplayFormat(ApplyFormatInEditMode=true,DataFormatString="{0:c}")]
        [Required(ErrorMessage = "金额不能为空")]
        [Range(typeof(decimal), "20.0", "30.0", ErrorMessage = "金额在{1}和{2}之间")]
        public decimal Money { get; set; } //金额

        [Display(Name="手机号码")]        
        [DataType(DataType.PhoneNumber)]
        [RegularExpression(@"((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)", ErrorMessage = "格式不正确")]
        public int Phome { get; set; }

        [Display(Name="生日")]
        //[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString="yyyy/MM/dd")]
        [Required] //当前字段的值不能为空
        public DateTime Birthday { get; set; } //生日

        [Display(Name="备注")]
        [DataType(DataType.MultilineText)] //当前字段是个多行文本
        public string Remarks { get; set; } //备注

    }
}


View (Index)

@model MvcApplication2.Models.UserInfo

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <script src="~/Scripts/jquery-1.7.1.min.js"></script>
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
    
    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
    
        <fieldset>
            <legend>UserInfo</legend>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.UserName)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.UserName)
                @Html.ValidationMessageFor(model => model.UserName)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.UserPassword)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.UserPassword)
                @Html.ValidationMessageFor(model => model.UserPassword)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.TUserPassword)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.TUserPassword)
                @Html.ValidationMessageFor(model => model.TUserPassword)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.Email)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Email)
                @Html.ValidationMessageFor(model => model.Email)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.TEmail)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.TEmail)
                @Html.ValidationMessageFor(model => model.TEmail)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.IdentityNo)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.IdentityNo)
                @Html.ValidationMessageFor(model => model.IdentityNo)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.Age)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Age)
                @Html.ValidationMessageFor(model => model.Age)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.Money)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Money)
                @Html.ValidationMessageFor(model => model.Money)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.Phome)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Phome)
                @Html.ValidationMessageFor(model => model.Phome)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.Birthday)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Birthday)
                @Html.ValidationMessageFor(model => model.Birthday)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.Remarks)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Remarks)
                @Html.ValidationMessageFor(model => model.Remarks)
            </div>
    
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }
    
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
</body>
</html>






内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: