ASP.NET DynamicData Проверка пользовательского изображения FieldTemplate - PullRequest
2 голосов
/ 13 января 2012

Я создал собственный шаблон поля изображения, который отлично работает. Я решил создать некоторую проверку для размеров изображения, поэтому я создал собственный атрибут проверки. вот код:

public class ImageSizeValidator : ValidationAttribute
{
    public long MaxSize { get; set; }
    public long MinSize { get; set; }

    public override bool IsValid(object value)
    {
        if (value == null)
            return true;

        byte[] image = (byte[]) value;

        if (image.Length / 1024L > MaxSize || image.Length / 1024L < MinSize)
            return false;

        return true;
    }
}

и вот мой FieldTemplate Image_Edit.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Image_Edit.ascx.cs" Inherits="RastinArgham.CRM.Web.DynamicData.FieldTemplates.Image_Edit" %>

<asp:FileUpload ID="FileUpload1" runat="server" OnDataBinding="FileUpload1DataBinding" />

<asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" CssClass="DDControl DDValidator" ControlToValidate="FileUpload1" Display="Static" Enabled="false" />
<asp:DynamicValidator runat="server" ID="DynamicValidator1" CssClass="DDControl DDValidator" ControlToValidate="FileUpload1" Display="Static" />

и вот Image_Edit.ascx.cs:

public partial class Image_Edit : System.Web.DynamicData.FieldTemplateUserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        SetUpValidator(RequiredFieldValidator1);
        SetUpValidator(DynamicValidator1);
    }

    protected override void ExtractValues(IOrderedDictionary dictionary)
    {
        if (FileUpload1.PostedFile == null || String.IsNullOrEmpty(FileUpload1.PostedFile.FileName) || FileUpload1.PostedFile.InputStream.Length == 0)
            return;

        dictionary[Column.Name] = FileUpload1.FileBytes;
    }

    public override Control DataControl
    {
        get
        {
            return FileUpload1;
        }
    }
}

и, наконец, мой класс метаданных сущности:

[Display(Name = "ServicePhoto", Order = 410, GroupName = "Misc")]
[HideColumnIn(PageTemplate.List)]
[UIHint("Image")]
[ImageSizeValidator(ErrorMessage = "Invalid Photo Size", MinSize = 30, MaxSize = 300)]
 public object ServicePhoto { get; set; }

Есть две проблемы:

1 - когда вызываемое значение IsValid (значение объекта) всегда равно нулю!

2 - при попытке загрузить новое изображение я всегда получаю сообщение «Значение недопустимо» Ошибка на стороне клиента проверка.

...