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

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


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

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

реализацию чего?
как один класс отнаследовать от другого?
...
Рейтинг: 0 / 0
24.07.2012, 11:45
    #37890236
Парамон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сделать хитрость с data annotation
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
25.07.2012, 23:44
    #37893060
Neprosto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сделать хитрость с data annotation
"Пыжусь" с кодом, но что-то все никак)
Код: 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
27.07.2012, 17:12
    #37895827
Парамон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сделать хитрость с data annotation
NeprostoДа и вообще критику бы услышать.
Да нечего тут критиковать. Не все примеры работают сразу после "копипаста". Дебажте.
...
Рейтинг: 0 / 0
28.07.2012, 01:48
    #37896264
Neprosto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сделать хитрость с data annotation
ПОМОГИТЕ)

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

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


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