2012-01-27 4 views
2

Следующая разметка создает флажок ввода типа с id="IsRecurring", когда в браузере отправляется представление Razor.Добавить обработчик, обработанный флажком на стороне клиента, на вид Razor

<div class="editor-label"> 
    @Html.LabelFor(model => model.IsRecurring) 
</div> 

<div class="editor-field"> 
    @{ 
     @Html.EditorFor(model => model.IsRecurring) 
    } 
</div> 

Мне нужно показать/скрыть другой блок разметки, в зависимости от установленного состояния флажка.

Какой способ Самый лучший способ MVC3?

Мой план должен пойти с добавлением следующего сценария выше DIV:

<script type="text/javascript"> 
    $("#IsRecurring").click(function() { 
     do show hide; 
    }); 
</script> 

Где подходящее место в моей разметке, чтобы поместить сценарий? Есть ли лучший способ установить ссылку IsReccuring, а не знать, какой идентификатор у него будет заблаговременно?

ответ

2

как скрыть/показать это поведение я хотел бы использовать сценарий, добавив класс в флажком:

@Html.CheckBoxFor(model => model.IsRecurring, new {@class "recurring"}) 


//event 
$(".recurring input:checkbox").click(function() { 
        //hide/show 
       }); 
+1

нет необходимости использовать новый класс, так как двигатель Razor связывает checkbx с моделью, таким образом дает идентификатор IsRecurring к флажку – korzeniow

+0

Где находится логика обработки событий в представлении? Это даже метр? Как бы я мог ссылаться на элемент через ID в частности. У меня нет класса флажков, поэтому использование класса в ошибке в моем случае. –

3

Вы можете попробовать так:

@Html.CheckBoxFor(model => model.IsRecurring, new {onchange = "checkedChanged"}) 

//JS 
var checkedChanged = function() { 
    alert("checkedChanged"); 
} 
+1

Более старые IE, чем IE9, не распознают событие onchange AFAIK – korzeniow

+0

Как я уже говорил, я готов использовать ненавязчивый подход для разделения логики сценариев клиентов из модели документа. Кроме того, мой вопрос включал «где в перспективе должен идти JS»? –

+1

Это сработало для нас. Максим, мы помещаем наш javascript во внешний .js-файл, связанный с тегом скрипта. –

0

Вы также можете попробовать:

$('#checkboxId').click(function() { 
    //add code here 
    });