بهترین فرصت آموزش در جشنواره تخفیف های توسینسو بهترین فرصت آموزش در جشنواره تخفیف های توسینسو
مانده تا پایان تخفیف ها
مشاهده دوره ها
0

چک کردن customAttribute در سمت کاربر

سلام

فرض کنید custom attribute به اسم CodeMelli ایجاد کرده ام و بصورت زیر بکاربرده ایم

 [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>


کد در سمت سرور درسست کار میکند اما متاسفانه سمت کاربر کارنمیکند

برای حل این مشکل باید چکار کنم

پرسیده شده در 1396/10/18 توسط

2 پاسخ

0

سلام، وقت بخیر، Attribute های Validation که به صورت Custom ایجاد میشن در سمت کلاینت پشتیبانی نمیشن و فقط سمت سرور Validation رو انجام میدن. برای اضافه کردن Client Side Validation باید اینترفیس IClientValidatable رو داخل Attribute تون پیاده سازی کنید که داخل لینک در موردش توضیح داده شده. یک راهکار دیگه هم استفاده از RegEx برای Validation هست که در سمت کلاینت پشتیبانی میشه.

پاسخ در 1396/10/18 توسط
0

سلام

کد من بصورت زیر است چگونه باید تغییرش بدهم

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));
        }
    }
}
پاسخ در 1396/10/18 توسط

پاسخ شما