[C#][ASP.NET MVC]Validation
網頁開發中驗證client端所提交的資料是否符合規定算很普遍的功能,自己紀錄一下。
簡單驗證(Server-Side)
Validation Methods
#region Validation Methods
public bool ValidateNull(String type,String input)
{
String error = String.Empty;
switch (type)
{
case "BookName":
error = "書籍名稱必填";
break;
case "UserName":
error = "作者性名必填";
break;
}
if (String.IsNullOrEmpty(input))
{
ModelState.AddModelError(input, error);
}
return ModelState.IsValid;
}
public bool ValidateLength(String type, String input)
{
String error = String.Empty;
switch (type)
{
case "UserName":
error = "作者性名長度不能超過10個單字";
break;
}
if (input.Length>10)
{
ModelState.AddModelError(input, error);
}
return ModelState.IsValid;
}
#endregion
Create in Controller
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
if (!ValidateNull("BookName", collection["BookName"]))
{
return View();
}
if (!ValidateNull("UserName", collection["UserName"]))
{
return View();
}
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
結果
另一種方法,使用Data Annotation Validators。
先加入Microsoft.Web.Mvc.DataAnnotations.dll和System.ComponentModel.DataAnnotations.dll並引用
using System.ComponentModel.DataAnnotations;
Register the DataAnnotations Model Binder in the Global.asax
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
ModelBinders.Binders.DefaultBinder =
new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
}
Add Models
namespace MVCcrud.Models
{
public partial class BookRepository
{
[Required(ErrorMessage = "書籍名稱必填")]
public string BookName { get; set; }
[Required(ErrorMessage = "作者性名必填")]
[StringLength(10,ErrorMessage = "長度不能超過10個單字")]
public string UserName { get; set; }
public string Website { get; set; }
[Required(ErrorMessage = "Email必填")]
[RegularExpression("^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@ ([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$", ErrorMessage = "請輸入正確Email")]
public string Email { get; set; }
}
}
這時Create只要寫成這樣
public ActionResult Create(BookRepository bookrepository)
{
//if (!ValidateNull("BookName", collection["BookName"]))
//{
// return View();
//}
//else if (!ValidateNull("UserName", collection["UserName"]))
//{
// return View();
//}
//else if (!ValidateLength("UserName", collection["UserName"]))
//{
// return View();
//}
if (!ModelState.IsValid)
return View();
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
結果
當然還有其他方法大家可自行研究
參考
http://aspnet.codeplex.com/releases/view/24471
http://www.asp.net/(S(pdfrohu0ajmwt445fanvj2r3))/learn/mvc/tutorial-36-cs.aspx
http://www.asp.net/(S(pdfrohu0ajmwt445fanvj2r3))/learn/mvc/tutorial-39-cs.aspx
補充:ASP.NET MVC2看來不用這麼麻煩了。