آموزش طراحی سایتنکات و ترفندهای Asp.Net MVC

اعتبارسنجی نوع فایل در سمت کلاینت با Custom Validation در ASP.NET MVC

با عرض سلام خدمت تمامی علاقمندان و همراهان مباحث آموزشی طراحی سایت با ASP.NET MVC ، در این جلسه آموزشی قصد داریم تا شما رو با نحوه اعتبارسنجی نوع فایل در سمت کلاینت با Custom Validation آشنا نماییم پس با ما همراه باشید .

اعتبارسنجی نوع فایل با در سمت Client با Custom Validation

ابتدا یک پروژه از نوع MVC  ایجاد کنید سپس یک class به پروژه خود اضافه نمایید برای این منظور بر روی پروژه خود راست کلیک کرده و سپس پس از انتخاب گزینه add بر روی Class کلیک نمایید حال نام این کلاس را FileTypeAttribute قرار دهید البته شما می توانید هر نام دلخواهی که می‌خواهید برای این کلاس انتخاب کنید. سپس کدهای زیر را درون کلاس FileTypeAttribute کپی نمایید.

کلاس FileTypeAttribute از دو کلاس ValidationAttribute و IClientValidatable ارث بری می کند ، کلاس IClientValidatable به منظور اعتبارسنجی فایل در سمت Client استفاده شده است.

سازنده ی کلاس FileTypeAttribute فرمت های قابل قبول فایل را که با علامت ” , ”  از هم جدا شده اند را به عنوان پارامتر ورودی دریافت می‌کند. و متد IsValid یک فایل را به عنوان پارامتر ورودی دریافت نموده و سپس فرمت این فایل را با فرمت های قابل قبول مطابقت می دهد و درصورتی که فرمت فایل با فرمت های قابل قبول ورودی مطابقت نداشت یک پیام خطا بر می گرداند.

کدهای مربوط به کلاس FileTypeAttribute

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace FileUploadValidation.CustomValidation
{
    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class FileTypeAttribute : ValidationAttribute, IClientValidatable
    {
        private const string _DefaultErrorMessage = "Only the following file types are allowed: {0}";
        private IEnumerable<string> _ValidTypes { get; set; }

        public FileTypeAttribute(string validTypes)
        {
            _ValidTypes = validTypes.Split(',').Select(s => s.Trim().ToLower());
            ErrorMessage = string.Format(_DefaultErrorMessage, string.Join(" or ", _ValidTypes));
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            IEnumerable<HttpPostedFileBase> files = value as IEnumerable<HttpPostedFileBase>;
            if (files != null)
            {
                foreach (HttpPostedFileBase file in files)
                {
                    if (file != null && !_ValidTypes.Any(e => file.FileName.EndsWith(e)))
                    {
                        return new ValidationResult(ErrorMessageString);
                    }
                }
            }
            return ValidationResult.Success;
        }

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule
            {
                ValidationType = "filetype",
                ErrorMessage = ErrorMessageString
            };
            rule.ValidationParameters.Add("validtypes", string.Join(",", _ValidTypes));
            yield return rule;
        }
    }
}

حال بر روی پوشه Scripts در پروژه خود راست کلیک کرده و یک فایل جاوا اسکریپت به نام  ایجاد FileType.js نمایید و سپس کدهای زیر را که جهت اعتبارسنجی نوع فایل در سمت کلاینت نوشته شده است درون آن فایل کپی کنید.

کدهای مربوط به فایل FileType.js

$.validator.unobtrusive.adapters.add('filetype', ['validtypes'], function (options) {
    options.rules['filetype'] = { validtypes: options.params.validtypes.split(',') };
    options.messages['filetype'] = options.message;
});

$.validator.addMethod("filetype", function (value, element, param) {
    for (var i = 0; i < element.files.length; i++) {
        var extension = getFileExtension(element.files[0].name);
        if ($.inArray(extension, param.validtypes) === -1) {
            return false;
        }
    }
    return true;
});

function getFileExtension(fileName) {
    if (/[.]/.exec(fileName)) {
        return /[^.]+$/.exec(fileName)[0].toLowerCase();
    }
    return null;
}

حال فقط کافی است که در Model و یا ViewModel خود ویژگی [ ()FileType ] را به پراپرتی فایل که از نوع HttpPostedFileBase است  اضافه نمایید توجه داشته باشید که اتربیت FileType فرمت های قابل قبول برای فایل را به عنوان ورودی می پذیرد و درصورتی که فرمت فایل آپلود شده با فرمت های وارد شده در اتریبیت FileType مطابقت نداشت یک پیام خطا به کاربر نمایش می شود .

اینم بخون، جالبه
رابطه یک به یک بین جداول در ASP.NET MVC به روش EF Codefirst

کدهای مربوط به ViewModel

public class MyViewModel
    {   
        [FileType("JPG,JPEG,PNG")] // فرمت های قابل قبول فایل
        public HttpPostedFileBase Photo { get; set; }
    }

 

حال یک View ایجاد نموده و کدهای زیر را در آن بنویسید و سپس پروژه خود را اجرا نمایید. توجه داشته باشید که حتما باید فایل  FileType.js را در View فراخوانی کنید.

کدهای مربوط به View

@model FileUploadValidation.Models.ViewModel.MyViewModel

@{
    ViewBag.Title = "Home Page";
}


@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.TextBoxFor(m => m.Photo, new { type = "file" })
    @Html.ValidationMessageFor(m => m.Photo,null, new { id = "validationTxt" })
    <input type="submit" value="upload" />
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/Scripts/FileType.js")
}

به پایان این جلسه آموزشی رسیدیم امیدوارم که مطالب این مقاله آموزشی برای شما عزیزان مفید واقع  شده باشد درصورتی در اتباط با این مقاله سوالی داشتید حتما در نظرات سایت میزفا مطرح کنید.

 

 

اعتبارسنجی نوع فایل در سمت کلاینت با Custom Validation در ASP.NET MVC
امتیاز 5 از 1 رای
برچسب ها

آرزو ابراهیمی

بیش از 4 سال است که زمینه طراحی و توسعه سایت فعالیت می‌کنم، طراح و برنامه نویس انواع سامانه‌های تخصصی پزشکی، مناقصات، فروشگاهی و ... بودم و هستم و هدفم در سایت میزفا ارائه اطلاعات بروز و ناب در زمینه طراحی سایت است. تا از این طریق بتونم تجربیات و دانسته های خودم را با تمامی علاقمندان به مباحث طراحی سایت به اشتراک بزارم .

نوشته های مشابه

‫2 نظرها

  1. اگه ایمیل یا شماره تماسی از خانم آرزو ابراهیمی در اختیارم بگذارید ممنون میشم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا
سایت خود را در گوگل مدیریت کنید + ۱۵ ساعت فیلم آموزشیجزئیات بیشتر اینجا کلیک کنید
بستن
با موفقیت ثبت شد، میزفا از شما برای عضویت در خبرنامه هفتگی تشکر میکند.

عضویت در خبرنامه هفتگی برای دریافت:

  • فیلم و مقاله رایگان سئو
  • آموزش‌های UX ، GA و GTM
  • مقاله های تخصصی ASP.NET Core
  • اطلاع رسانی از محصولات
ترک میزفا خوب نیست!
دوره رایگان سئو