powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / сделать хитрость с data annotation
12 сообщений из 12, страница 1 из 1
сделать хитрость с data annotation
    #37888034
Neprosto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В параметры аттрибута можно передавать только статические параметры. А мне нужно, например, сделать это следующим образом, но выскакивает ошибка соответствующая на этапе компилляции.

[Range(1900, DateTime.Now.Year)]
public Nullable<short> START_YEAR { get; set; }


Каким-то образом можно решить эту задачу?
...
Рейтинг: 0 / 0
сделать хитрость с data annotation
    #37888041
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Neprosto,

проверять значение в сеттере
...
Рейтинг: 0 / 0
сделать хитрость с data annotation
    #37888262
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свой аттрибут написать
...
Рейтинг: 0 / 0
сделать хитрость с data annotation
    #37888280
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отнаследоваться от еррор провайдера.
...
Рейтинг: 0 / 0
сделать хитрость с data annotation
    #37889632
Neprosto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно увидеть реализацию, хотя бы самую общую, но верную идеологически? Спасибо
...
Рейтинг: 0 / 0
сделать хитрость с data annotation
    #37889696
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NeprostoА можно увидеть реализацию, хотя бы самую общую, но верную идеологически? Спасибо

реализацию чего?
как один класс отнаследовать от другого?
...
Рейтинг: 0 / 0
сделать хитрость с data annotation
    #37890236
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NeprostoА можно увидеть реализацию, хотя бы самую общую, но верную идеологически? Спасибо

Код: c#
1.
2.
3.
4.
5.
6.
7.
public class MyRangeAttribute : ValidationAttribute
{
    public override bool IsValid(int value)
    {
        if(DateTime.Now.Year > value)
                 return false;
             ..... 


типа того
...
Рейтинг: 0 / 0
сделать хитрость с data annotation
    #37893060
Neprosto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Пыжусь" с кодом, но что-то все никак)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited=true)]
public class CurrentYearMaxRangeAttribute : ValidationAttribute, IClientValidatable
    {
        private const string DefaultErrorMessage = "Значение вне допустимого диапазона";

        public CurrentYearMaxRangeAttribute() :
            base(DefaultErrorMessage) 
        { }

        private int minValue = int.MinValue;
        private int maxValue = int.MaxValue;


        public int Max
        {
            get { return DateTime.Now.Year - 1; }
            set { maxValue = value; }
        }

        public int Min
        {
            get { return minValue; }
            set { minValue = value; }
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            ValidationResult validationResult = ValidationResult.Success;

            int val = (int)value;
           
            if ((val < Min) || (val > Max))
            {
                return new ValidationResult(FormatErrorMessage(this.ErrorMessage));
            }
            else
            {
                return validationResult;
            }          
        }

        public override string FormatErrorMessage(string name)
        {
            return base.FormatErrorMessage(name);
        }


        #region IClientValidatable Members

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule
            {
                ErrorMessage = FormatErrorMessage(this.ErrorMessage),
                ValidationType = "currentyearmaxrange"
            };

            yield return rule;

        }

        #endregion
    }



так атрибут к полю привязан в моделе
Код: c#
1.
2.
3.
//[Range(1950, 2020)]
 [CurrentYearMaxRange(Min=2000, ErrorMessage="Тестовая ошибка")]
 public Nullable<short> START_YEAR { get; set; }



вот так в контроллере значения для поля формирую:
Код: c#
1.
ViewBag.START_DATE = new SelectList(Enumerable.Range(1950, DateTime.Now.Year - 1949).OrderByDescending(x=>x));



вот так во вьюхе:
Код: html
1.
2.
3.
4.
<div>
            @Html.DropDownListFor(model => model.START_YEAR, (SelectList)ViewBag.START_DATE, "Выберете год...")  
            @Html.ValidationMessageFor(model => model.START_YEAR)          
 </div>



вот код файла MyCustomValidation.js (в папке Scripts в корне):
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
jQuery.validator.unobtrusive.adapters.add("currentyearmaxrange", function (options) {
    options.messages["currentyearmaxrange"] = options.message;
});

jQuery.validator.addMethod("currentyearmaxrange", function (value, element) {
    var currentYear = new Date().getFullYear();
    var valueYear = $("input[name = 'start_year']").val();

    if (valueYear > currentYear) {
        return true;
    }

    return false;
});



вот хтмл страницы получаемый:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
<select data-val="true" data-val-currentyearmaxrange="Тестовая ошибка" data-val-number="The field Начало выпуска must be a number." id="START_YEAR" name="START_YEAR" class="valid"><option value="">Выберете год...</option>
<option>2012</option>
<option>2011</option>
<option>2010</option>
<option>2009</option>
<option>2008</option>
<option>2007</option>
<option>2006</option>
<option>2005</option>
<option>2004</option>
<option>2003</option>
<option>2002</option>
<option>2001</option>
<option>2000</option>
...
<option>1950</option>
</select>

...

 <script src="/Scripts/jquery-1.7.2.js" type="text/javascript"></script>

<script src="/Content/bootstrap/js/bootstrap.js" type="text/javascript"></script>    

<script src="/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>

<script src="/Scripts/jquery.validate.js" type="text/javascript"></script>

<script src="/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>

<script src="/Scripts/MyCustomValidation.js" type="text/javascript"></script>




Не работает! Научите теперь, пожалуйста, как из того сделать рабочую "конфетку"))) Спасибо. Да и вообще критику бы услышать.
...
Рейтинг: 0 / 0
сделать хитрость с data annotation
    #37895827
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NeprostoДа и вообще критику бы услышать.
Да нечего тут критиковать. Не все примеры работают сразу после "копипаста". Дебажте.
...
Рейтинг: 0 / 0
сделать хитрость с data annotation
    #37896264
Neprosto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПОМОГИТЕ)

сам пока нашел вот такую ошибку
вместо var valueYear = $("input[name = 'start_year']").val();
написал var valueYear = $('#start_year').val();
так как элемент селект и не инпут
...
Рейтинг: 0 / 0
сделать хитрость с data annotation
    #37898782
CmeTanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NeprostoПОМОГИТЕ)

сам пока нашел вот такую ошибку
вместо var valueYear = $("input[name = 'start_year']").val();
написал var valueYear = $('#start_year').val();
так как элемент селект и не инпут
школота атакует
...
Рейтинг: 0 / 0
сделать хитрость с data annotation
    #37905943
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писать на каждый чих свой атрибут - маразм.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / сделать хитрость с data annotation
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]