您的位置:首页 > 编程语言 > ASP

Asp.net MVC 通过Attribute验证datamodel(一)

2012-08-08 21:23 483 查看
1. 除了可以使用Required, StringLength等Attribute,asp.net mvc中还可以自定义属于自己的验证Attribute。

例如:

//验证逻辑就是判断专辑的Title是否包含某一个关键字
public class AlbumTitleValidateAttribute : ValidationAttribute
{
private readonly string _keyword;

public AlbumTitleValidateAttribute(string keyword)
{
if (string.IsNullOrEmpty(keyword))
throw new Exception("invalid usage");
_keyword = keyword;
}

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null && value.ToString().ToUpper().Contains(_keyword.ToUpper()))
{
return ValidationResult.Success;
}
else
return new ValidationResult(string.Format("Title does not contain the keyword({0})", _keyword));
}
}


2.定义DataModel,并且使用上面定义的attribute

public class Album
{
public int ID { get; set; }
[Required]
[AlbumTitleValidateAttribute("月亮")]
public string Title { get; set; }
[Required]
[StringLength(3)]
public string Author { get; set; }
}


这里定义专辑的Title必须包含有“月亮”二字

3. 绑定属性到前台页面

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<p>
@Html.EditorFor(m => m.Title)
@Html.ValidationMessageFor(m => m.Title)
</p>

<p>
@Html.EditorFor(m => m.Author)
@Html.ValidationMessageFor(m => m.Author)
</p>

@Html.HiddenFor(m => m.ID)

<input type="submit" value="submit" />
}


4. 添加Action在Controller.

[HttpPost]
public ActionResult Index(Album album)
{
if (ModelState.IsValid)
{
return RedirectToAction("About");
}
return View(album);
}


运行程序,然后就可以在前台页面修改一些值,看到验证效果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: