سلام
فرض کنید custom attribute به اسم CodeMelli ایجاد کرده ام و بصورت زیر بکاربرده ایم
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; using WebApplication1.Helper; namespace WebApplication1.Models { public class Person { [Required] public string Name { get; set; } [CodeMelli("test")] public string code { get; set; } } }
و در صفحه view کد زیر را نوشته ایم
@model WebApplication1.Models.Person @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>View</title> </head> <body> <div> @using (Html.BeginForm("About", "Home", FormMethod.Post)) { <p> @Html.LabelFor(m => m.Name) @Html.TextBoxFor(m => m.Name) @Html.ValidationMessageFor(m => m.Name) </p> <p> @Html.LabelFor(m => m.code) @Html.TextBoxFor(m => m.code) @Html.ValidationMessageFor(m => m.code) </p> <input type="submit" value="ثبت نام" /> } </div> <script src="~/Scripts/jquery-1.10.2.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> </body> </html>
کد در سمت سرور درسست کار میکند اما متاسفانه سمت کاربر کارنمیکند
برای حل این مشکل باید چکار کنم
لطفا کد صفتی که نوشته اید را قرار بدید.
using System; using System.ComponentModel.DataAnnotations; using System.Globalization; using System.Linq; using System.Text.RegularExpressions; using System.Web.Mvc; namespace WebApplication1.Helper { [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] public class CodeMelliAttribute : ValidationAttribute { public CodeMelliAttribute(string ErrorMessage) : base() { this.ErrorMessage = ErrorMessage; } public override bool IsValid(object value) { if (value == null) return false; if (IsValidNationalCode(value.ToString()) == false) return false; return true; } public bool IsValidNationalCode(string nationalcode) { if (string.IsNullOrEmpty(nationalcode)) return false; if (!new Regex(@"\d{10}").IsMatch(nationalcode)) return false; var array = nationalcode.ToCharArray(); var allDigitEqual = new[] { "0000000000", "1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666", "7777777777", "8888888888", "9999999999" }; if (allDigitEqual.Contains(nationalcode)) return false; var j = 10; var sum = 0; for (var i = 0; i < array.Length - 1; i++) { sum += Int32.Parse(array[i].ToString(CultureInfo.InvariantCulture)) * j; j--; } var div = sum / 11; var r = div * 11; var diff = Math.Abs(sum - r); if (diff <= 2) { return diff == Int32.Parse(array[9].ToString(CultureInfo.InvariantCulture)); } var temp = Math.Abs(diff - 11); return temp == Int32.Parse(array[9].ToString(CultureInfo.InvariantCulture)); } } }
زمانی که شما از data annotation برای اعتبار سنجی استفاده می کنید ASP.NET MVC تنها میتوان صفت های خود و Regex را با فریم ورک jQuery Validation ادقام کند و فیلد های شما را در سمت کاربر اعتبار سنجی کند. حال برای حال این مشکل باید خودتان آن را در سمت کاربر اعتبار سنجی کنید. مقاله زیر این کار رو انجام داده :
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)