ورود

View Full Version : سوال: ValidationAttribute



aroshanzamir
دوشنبه 11 اسفند 1393, 16:04 عصر
در صورتی که ما قصد داشته باشیم برای اعتبار سنجی در سمت کلاینت بجای استفاده از Attribute های پیش فرض مثل Required خودمان یک Attribute بنویسیم چرا اعتبار سنحی در سمت کلاینت انجام نمی شود در شرایطی که برای مابقی Property ها که از Attribute های پیش فرض استفاده شده است اتبار سنجی در سمت کلاینت انجام می شود ولی برای Attribute های سفارشی در سمت کلاینت انجام نمی شود ؟ برای مثال :


public class FileSizeAttribute : ValidationAttribute
{
private readonly int _maxSize;


public FileSizeAttribute(int maxSize)
{
_maxSize = maxSize;
}


public override bool IsValid(object value)
{
if (value == null) return true;
return (value as HttpPostedFileBase).ContentLength <= _maxSize;
}


public override string FormatErrorMessage(string name)
{
return string.Format("حجم فایل آپلودی شما نباید از {0} کیلو بایت تجاوز کند", (_maxSize/1024).ToString());
}
}




سپاس از همه شما /

karadous
دوشنبه 11 اسفند 1393, 16:26 عصر
در سمت کلاینت در صورتی که از jquery.validate استفاده کنید، validation هایی مانند Required انجام می شود، در غیر اینصورت انجام نمی شود. برای به دست آوردن اندازه فایل خودتان باید یک validator در javascript بنویسید.
//binds to onchange event of your input field
$('#myFile').bind('change', function() {


//this.files[0].size gets the size of your file.
alert(this.files[0].size);


});

aroshanzamir
دوشنبه 11 اسفند 1393, 19:27 عصر
سلام سپاس از تو که وقت گذلشتی و پاسخ دادی /
من از فایل جی کوئری
jquery.validate هم استفاده کردم به صفحه رفرنس داده شده .. مشکل اینه که چرا برای مابقی مثل Required کار می کنه و برای این Attribute که خودم نوشتم در سمت کلاینت کار نمی کنه ؟

aroshanzamir
پنج شنبه 14 اسفند 1393, 23:29 عصر
خداوندا چرا این کار نمی کند دلیل چیست ؟

dabirsiaghi
جمعه 15 اسفند 1393, 05:58 صبح
http://www.codeproject.com/Articles/275056/Custom-Client-Side-Validation-in-ASP-NET-MVC

karadous
جمعه 15 اسفند 1393, 10:13 صبح
روال validate کردن برای required در jqueryval پیاده سازی شده. شما هم باید خودتون این روال رو برای validator خودتون توی جاوااسکریپت پیاده سازی کنید.

aroshanzamir
جمعه 15 اسفند 1393, 10:36 صبح
با سلام و تشکر فراوان از دو دوست خوبم Karadous و dabirsiaghi که وقت گذاشتید و پاسخ دادید ////
بینهایت سپاسگزارم

r4hgozar
جمعه 15 اسفند 1393, 10:54 صبح
سلام.
یا من درست متوجه نشدم یا اینکه شما کدی که در اولین پست گذاشتین رو اشتباه کردین.
شما وقتی میگین اعتبار سنجی در سمت کلاینت یعنی اینکه بدون اینکه ارسال بشه به سمت سرور این کار انجام بشه.
اما شما با کد بالا مطالب رو می فرستین سمت سرور و اعتبار سنجی می شه و بعد پاس داده میشه سمت کلاینت.
برای اعتبار سنجی سمت کلاینت باید با java script کار رو انجام بدین.
موفق باشید

hakim22
جمعه 15 اسفند 1393, 11:00 صبح
شما باید Validation ها رو در DataAnnotationsModelValidatorProvider رجیستر کنید. مثل روتها یا دیگر فیلترها .

در Global.asax در متد Application_Start اضافه کنید :


DataAnnotationsModelValidatorProvider.RegisterAdap ter(
typeof(FileSizeAttribute),
typeof(ValidationAttribute));

aroshanzamir
جمعه 15 اسفند 1393, 14:17 عصر
سلام hakim22 (http://barnamenevis.org/member.php?244339-hakim22)
سپاس از تو که وقت گذاشتی و پاسخ دادی/متشکرم