Controller中的验证属性

时间:2013-05-28 07:23:19

标签: c# asp.net-mvc custom-attributes

我编写自己的属性来验证ASP.NET MVC中的模型:

public class ValidateImage : RequiredAttribute, IClientValidatable
{
    public override bool IsValid(object value)
    {
        // validate object
    }
}

我用这种方式使用这些属性:

public class MyModel
{
    [ValidateImage]
    public HttpPostedFileBase file { get; set; }
}

现在,我想让它在控制器中工作,我将此属性添加到属性,而不是模型:

public ActionResult EmployeePhoto(string id, [ValidateImage] HttpPostedFileBase file)
{
    if(ModelState.IsValid)
    {
    }
}

但是我的属性永远不会执行。如何在不使用模型的情况下在控制器中进行验证?

1 个答案:

答案 0 :(得分:2)

不支持此功能。只需编写一个视图模型来包装操作的所有参数:

public ActionResult EmployeePhoto(EmployeePhotoViewModel model)
{
    if (ModelState.IsValid)
    {
    }
}

可能如下所示:

public class EmployeePhotoViewModel 
{
    public string Id { get; set; }

    [ValidateImage]
    public HttpPostedFileBase File { get; set; }
}