using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVCDemo.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
public ActionResult Method1()
{
Student stu = new Student() { name="张三", age=30 };
ViewData.Model = stu;
return View();
}
public ActionResult Method2()
{
Student stu = new Student() { name = "李四", age = 30 };
ViewData.Model = stu;
return View();
}
public ActionResult Method3(FormCollection fc)
{
Student stu = new Student() { name = fc["name"], age = Convert.ToInt32( fc["age"]) };
ViewData.Model = stu;
return View();
}
[ModelFilter]
public ActionResult Method4(Student s)
{
//Student stu = null;
//if (ModelState.IsValid)
//{
// stu = new Student() { name = s.name, age = s.age };
// ViewData.Model = stu;
//}
//stu = new Student() { name = "", age = 0,sex="" };
//ViewData.Model = stu;
//ViewBag.ErrorMessage = ModelState.Values.Where(x => x.Errors.Count > 0).SelectMany(x => x.Errors).SelectMany(x => x.ErrorMessage).ToList();
ViewData.Model = s;
return View("Method1");
}
}
public class Student
{
[Required(AllowEmptyStrings =false,ErrorMessage ="Name属性不可为null")]
public string name { get; set; }
[Range(20,30,ErrorMessage ="年龄必须在20-30中间")]
public int age { get; set; }
[Domain("M","F","m","f",ErrorMessage ="有效的{0}必须是{1}之一")]
public string sex { get; set; }
}
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class DomainAttribute : ValidationAttribute
{
public IEnumerable<string> Values { get; private set; }
public DomainAttribute(string value)
{
this.Values = new string[] { value };
}
public DomainAttribute(params string[] values)
{
this.Values = values;
}
public override bool IsValid(object value)// 验证是否有效value是传递的值
{
return this.Values.Any(item => value.ToString() == item);
}
public override string FormatErrorMessage(string name)// name 是栏位名称,验证失败走这一段
{
string[] values = this.Values.Select(value => string.Format("'{0}'", value)).ToArray();
return string.Format(base.ErrorMessageString, name, string.Join(",", values));
}
}
public class ModelFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.Controller.ViewData.ModelState.IsValid)
{
///实体验证未通过
var ErrorMsg = string.Concat(context.Controller.ViewData.ModelState.Values.Where(x => x.Errors.Count > 0).SelectMany(x => x.Errors).SelectMany(x => x.ErrorMessage).ToList());
context.Result = new JsonResult() { Data=new {state=-1,errMessage= ErrorMsg } }; // 返回JSON
string controller = context.RouteData.Values["controller"].ToString();
string actionname=context.RouteData.Values["action"].ToString();
//context.Result = new RedirectResult("~/Home/Method1"); // 返回重定向
return;
}
}
}
}
@{
}
@model MVCDemo.Controllers.Student
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<script>
$(function () {
$(".btn").click(function () {
$.post("Method4", { name: $("#name").val(), age: $("#age").val(), sex: $("#sex").val() }, function (result) {
console.log(result);
alert(result.errMessage);
})
});
});
</script>
<h1>Method1</h1>
<div>
@*@foreach(var item in @ViewBag.ErrorMessage)
{
@item
}*@
</div>
<div>
@Model.name
</div>
<div>
@Model.age
</div>
<div>
@Model.sex
</div>
<div>
@using (Html.BeginForm("Method4", "Home", FormMethod.Post))
{
@Html.TextBox("name")
@Html.TextBox("age")
@Html.TextBox("sex")
<input type="submit" value="提交"/>
<input type="button" value="ajax提交" class="btn"/>
}
</div>
</body>
</html>