2013-10-08 2 views
0

меня DropDownListFor на мой взгляд:JQuery валидатор addMethod не работает с DROPDOWNLIST

@Html.DropDownListFor(model => model.PeriodCode,..., new { name = "Period", id = "PeriodID"}) 

И моя проверка следующим образом:

jQuery.validator.addMethod('NonEmpty', function (value) { 
    return ($("#PeriodID").val() != ""); 
}, ''); 

jQuery("#form").validate({ 
    rules: { 
     Year: { 
      required: true 
     }, 
     Period: { 
      NonEmpty: true 
     } 
    }, 
    messages: { 
     Year: { 
      required: "<div style='color:red'>Message 1 </div>" 
     }, 
     Period: { 
      NonEmpty: "<div style='color:red'>Message 2 </div>" 
     } 
    } 
}); 

Проблема заключается в том, что jQuery AddMethod функция не вызывается, когда я представляю свой формы, поэтому мой DropDownList не подтвержден. Однако валидация для TextBox с именем 'Year' работает нормально. Что я делаю не так?

Буду признателен за любую помощь!

+0

Что такое метод 'NonEmpty', когда он выполняет ту же логику, что и' required'? –

+0

Да, значение DDL не должно быть пустой или пустой строкой. –

+0

Это моя мысль - встроенный 'обязательный 'валидатор проверит это для вас. –

ответ

1

Вам не хватает $ перед селектором ("#PeriodID").

jQuery.validator.addMethod('NonEmpty', function (value) { 
    return ($("#PeriodID").val() != ""); 
}, ''); 

Демо: Fiddle

Во всяком случае правило валидатор должен быть, как - правило не должно жесткий код любого элемента, он должен подтвердить значение, переданное ему

jQuery.validator.addMethod('NonEmpty', function (value, elem, args) { 
    return value != ""; 
}, ''); 

Demo: Fiddle

Примечание: нет необходимости добавлять такое правило, поскольку оно может быть достигнуто с помощью required правило

Update: имя поля периода не Period он PeriodCode

jQuery("#form").validate({ 
    rules: { 
     Year: { 
      required: true 
     }, 
     PeriodCode: { 
      NonEmpty: true 
     } 
    }, 
    messages: { 
     Year: { 
      required: "<div style='color:red'>Message 1 </div>" 
     }, 
     PeriodCode: { 
      NonEmpty: "<div style='color:red'>Message 2 </div>" 
     } 
    } 
}); 

Демо: Fiddle, with required rule

+0

Спасибо за ваш ответ, но проблема в том, что метод не вызывается, если я помещаю alert() внутри метода, он не появится. –

+0

@GyuzalRakhmayeva вы можете попытаться воссоздать этот вопрос, используя прилагаемые скрипки –

+0

@Arun .val() возвращает значение , если значение не указано в настройках он будет возвращать нуль ... – Shashank

0

Использование

$('select[id=PeriodID] option:selected').text(); 

вместо

("#PeriodID").val() 
+0

Почему нам нужно снова проверить «текст»? Надеюсь, он должен быть проверен с помощью свойства 'value'' option', которое является 'val()' –

0

Если ваш крюк addMethod не зарегистрирован, это, скорее всего, потому, что у вас есть код внутри обработчика DOM Ready или, возможно, закрытие. Попробуйте переместить код за пределы любого лямбда; вы должны затем получить код для запуска по желанию.

Для получения более подробной информации см. ASP .Net MVC 3: Custom unobtrusive validation. Это характерно для «ненавязчивой» библиотеки, но рассуждения одинаковы.

Смежные вопросы