在模型中 我们可以这样定义modal
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
namespace Models
{
public class LoginViewModel{
[Remote("getnickname", "data", ErrorMessage = "用户已存在!"/*, HttpMethod = "get"*/)]
[Required(ErrorMessage = "请输入用户名")]
[RegularExpression(@"^[a-zA-Z0-9_]{4,}$", ErrorMessage = "由a-zA-Z0-9_构成,最少四位")]
[Display(Name = "用户名")]
public string UserName { get; set; }
}
}
在datacontroller里我们可以这样定义
public class DataController : Controller
{
EntityContainer db =new EntityContainer();
public ActionResult getnickname()
{
string nickname = Request.QueryString["UserName"];
var number = db.Nf_Users.Where(m => m.user_name == nickname).Count();
// string value = number == 0 ? "true" : "false";
// return Content(value);
return Json(number == 0, JsonRequestBehavior.AllowGet);
}
在cshtml
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", id = "registerForm", role = "form" }))
{
@Html.AntiForgeryToken()
<div class="form-group">
@Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })*
@Html.ValidationMessageFor(m => m.UserName)
</div>
</div>
}
好了,完成。当然我们在
[Remote("getnickname", "data", ErrorMessage = "用户已存在!"/*, HttpMethod = "get"*/)]
中也可以定义 HttpMethod = “post”
这样省得我们在script标签下使用validte语句
校验
$("#registerForm").validate({
rules: {
UserName: {
// required: true,
remote: {
url: "/data/getnickname",
type: "get",
data: {
nickname: function () {
return $("#UserName").val();
}
}
}
},
UserPhone: {
// required: true,
remote: {
url: "/data/getphone",
type: "get",
data: {
phone: function () {
return $("#UserPhone").val();
}
}
}
}
},
messages: {
UserName: {
remote: "用户已存在"
},
UserPhone: {
remote: "手机已存在"
}
},
success: function () {
// alert("success!");
},
submitHandler: function (form) { form.submit(); }
});
使用这一招的代价就是mvc的验证功能被屏蔽,根本无法运行。