耽搁了一天,实在解决不了.先谢谢各位前辈指导
环境:windows 10,vs2015,sql server 2012
语言:c# mvc5
功能说明:一个简单的注册功能,用户注册时实例化用户注册类,模型验证成功后赋值给用户类,然后新增用户数据
类:用户类,用户注册类
控制器:用户类控制器(MVC5空)
视图:自定义的用户注册页面
问题描述:1,在模型验证失败后,重新渲染的视图页面,失败的那几个字段所在的控件,根本就点不了,改不了内容.没有报错的还是正常.如下图:

2,模型验证成功后,保存新增的用户数据时,报错.如下图:

附上代码:
用户类代码:
public class User
{
public int Id { get; set; }
[Display(Name = "帐号")]
[RegularExpression(@"^[a-zA-Z0-9]{6,16}$", ErrorMessage = "亲,帐号只能由6到16位的数字或字母组成")]
[StringLength(maximumLength: 16, MinimumLength = 6)]
//[Remote("/Users/CheckName")]
[Required(ErrorMessage = "{0}必须填写")]
public string Name { get; set; }
[Display(Name = "登陆密码")]
[DataType(DataType.Password)]
[StringLength(maximumLength: 16, MinimumLength = 6)]
[RegularExpression(@"^[a-zA-Z0-9]{6,16}$", ErrorMessage = "亲,密码只能由6到16位的数字或字母组成")]
[Required(ErrorMessage = "{0}必须填写")]
public string Password { get; set; }
[Display(Name = "用户状态")]
[Required(ErrorMessage = "{0}必须填写")]
public Boolean State { get; set; }
[Display(Name = "余额")]
[Range(minimum: 0, maximum: 99999)]
[Required(ErrorMessage = "{0}必须填写")]
public Decimal Account { get; set; }
[Display(Name = "昵称")]
[StringLength(maximumLength: 10, MinimumLength = 1)]
[Required(ErrorMessage = "{0}必须填写")]
public string NickName { get; set; }
[Display(Name = "电话")]
[DataType(DataType.PhoneNumber)]
public string Tel { get; set; }
[Display(Name = "QQ号")]
[StringLength(maximumLength: 13, MinimumLength = 5)]
[RegularExpression(@"^[0-9]{5,13}$", ErrorMessage = "亲,这个QQ号太高大上了")]
public string QQ { get; set; }
[Display(Name = "VIP时间")]
[Required(ErrorMessage = "{0}必须填写")]
public DateTime VipTime { get; set; }
[Display(Name = "QQ标识")]
[StringLength(maximumLength: 100, MinimumLength = 6)]
public string QQID { get; set; }
[Display(Name = "默认快递")]
[Required(ErrorMessage = "{0}必须填写")]
public int DefaultEx { get; set; }
}
用户注册类代码:
public class RegisterView
{
[Display(Name = "帐号")]
[RegularExpression(@"^[a-zA-Z0-9]{6,16}$", ErrorMessage = "亲,帐号只能由6到16位的数字或字母组成")]
[StringLength(maximumLength: 16, MinimumLength = 6)]
//[Remote("/Users/CheckName")]
[Required(ErrorMessage = "{0}必须填写")]
public string Name { get; set; }
[Display(Name = "登陆密码")]
[DataType(DataType.Password)]
[RegularExpression(@"^[a-zA-Z0-9]{6,16}$", ErrorMessage = "亲,密码只能由6到16位的数字或字母组成")]
[Required(ErrorMessage = "{0}必须填写")]
public string Password { get; set; }
[Display(Name = "确认密码")]
[DataType(DataType.Password)]
[System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = "两次密码必须一样")]
public string PasswordConfirm { get; set; }
[Display(Name = "QQ号")]
[Required(ErrorMessage = "{0}必须填写")]
[RegularExpression(@"^[0-9]{5,13}$", ErrorMessage = "亲,这个QQ号太高大上了")]
public string QQ { get; set; }
}
用户注册控制器,注册方法代码:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index([Bind(Include = "Name,Password,PasswordConfirm,QQ")] RegisterView userRegister)
{
v1._2.Models.User user = new Models.User();
if (ModelState.IsValid)
{
user.Name = userRegister.Name;
user.Password = userRegister.Password;
user.State = true;
user.Account = 0;
user.NickName = userRegister.Name;
user.Tel = null;
user.QQ = userRegister.QQ;
user.VipTime = DateTime.Now;
user.QQID = null;
user.DefaultEx = 1;
db.Users.Add(user);
db.SaveChanges();
return RedirectToAction("success");
}
return View(userRegister);
}
用户注册视图:
<div class="panel-body">
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal col-md-11">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(m => m.Name, new { @class = "control-label col-md-3 col-sm-3 col-xs-3" })
<div class="input-group col-md-9 col-sm-9 col-xs-9">
<span class="input-group-addon btn"><i class="glyphicon glyphicon-user"></i></span>
@Html.EditorFor(m => m.Name, new { htmlAttributes = new { @class = "form-control", placeholder = "6-16位字母或数字" } })
</div>
<div class="col-md-12 text-right text-danger">@Html.ValidationMessageFor(m => m.Name)</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Password, new { @class= "control-label col-md-3 col-sm-3 col-xs-3" })
<div class="input-group col-md-9 col-sm-9 col-xs-9">
<span class="input-group-addon btn"><i class="glyphicon glyphicon-lock"></i></span>
@Html.EditorFor(m=>m.Password,new { htmlAttributes = new { @class = "form-control", placeholder = "6-16位数字或字母" } })
</div>
<div class="col-md-12 text-right text-danger">@Html.ValidationMessageFor(m => m.Password)</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.PasswordConfirm, new { @class="control-label col-md-3 col-sm-3 col-xs-3"})
<div class="input-group col-md-9 col-sm-9 col-xs-9">
<span class="input-group-addon btn"><i class="glyphicon glyphicon-repeat"></i></span>
@Html.EditorFor(m => m.PasswordConfirm, new { htmlAttributes = new { @class = "form-control", placeholder = "两次密码必须一样" } })
</div>
<div class="col-md-12 text-right text-danger">@Html.ValidationMessageFor(m => m.PasswordConfirm)</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.QQ, new { @class = "control-label col-md-3 col-sm-3 col-xs-3" })
<div class="input-group col-md-9 col-sm-9 col-xs-9">
<span class="input-group-addon btn"><i class="glyphicon glyphicon-bell"></i></span>
@Html.EditorFor(m => m.QQ, new { htmlAttributes = new { @class = "form-control", placeholder = "找回密码用,选填" } })
</div>
<div class="col-md-12 text-right text-danger">@Html.ValidationMessageFor(m => m.QQ)</div>
</div>
<div class="form-group">
<div class="input-group col-md-9 col-sm-9 col-xs-9 col-md-offset-3">
<input type="submit" class="form-control btn btn-danger" id="btnOkResiter" value="立即注册" onclick="Register();" />
</div>
<input id="txtPengYouRegister" type="hidden" name="txtPengYouRegister" value="0" />
</div>
</div>
}
</div>
------解决思路----------------------
红色的提示信息是ErrorMessage?加上这个字段的Name?进行提示,后面那个错误是保存出现错误。要你自己断点去看。