C# 使用IValidatableObject验证mvc 3中上载的图像
我在asp.net MVC 3中使用新的IValidatabeObject接口验证上载的图像时遇到一些问题 我需要做两件事:C# 使用IValidatableObject验证mvc 3中上载的图像,c#,asp.net-mvc,C#,Asp.net Mvc,我在asp.net MVC 3中使用新的IValidatabeObject接口验证上载的图像时遇到一些问题 我需要做两件事: 确保上传的字节确实是图像 确保此图像的宽度为200px 我想我可以在验证块中使用try/catch来完成这一点: public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { try {
- 确保上传的字节确实是图像
- 确保此图像的宽度为200px
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
try
{
System.Drawing.Image img = System.Drawing.Image.FromStream(this.ImageFile.InputStream);
if (img.Width != 200)
yield return new ValidationResult("This picture isn't the right size!!!!");
}
catch (Exception ex)
{
yield return new ValidationResult("This isn't a real image!") ;
}
}
这会产生新的错误:“无法从迭代器返回值。请使用yield return语句…”
我喜欢将验证逻辑作为模型的一部分,因此我不想放弃IValidatableObject方法,但我看不到一种方法可以让它工作。将结果移到try-catch块之外
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
ValidationResult result = null;
try
{
var img = System.Drawing.Image.FromStream(this.ImageFile.InputStream);
if (img.Width != 200)
result = new ValidationResult("This picture isn't the right size!!!!");
}
catch (Exception ex)
{
result = new ValidationResult("This isn't a real image!") ;
}
if (result != null)
yield return result;
}
公共IEnumerable验证(ValidationContext ValidationContext)
{
ValidationResult=null;
尝试
{
var img=System.Drawing.Image.FromStream(this.ImageFile.InputStream);
如果(img.宽度!=200)
结果=新的ValidationResult(“此图片大小不正确!!!!”);
}
捕获(例外情况除外)
{
结果=新的ValidationResult(“这不是真实的图像!”);
}
如果(结果!=null)
收益结果;
}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
ValidationResult result = null;
try
{
var img = System.Drawing.Image.FromStream(this.ImageFile.InputStream);
if (img.Width != 200)
result = new ValidationResult("This picture isn't the right size!!!!");
}
catch (Exception ex)
{
result = new ValidationResult("This isn't a real image!") ;
}
if (result != null)
yield return result;
}