2013-10-03 4 views
0

Я новичок в MVC, поэтому считаю, что мне нужно указывать в правильном направлении.Событие изменения MVC CheckBox

У меня есть логическое в моей модели, которая создает флажок, на мой взгляд, используя:

@Html.EditorFor(model => model.Adults) 

У меня также есть выпадающем DropDownBox'е, который показывает содержание из ViewBag. Я хочу показать разные наборы ViewBag в зависимости от условия этого флажка.

Я могу сделать это, проверив мой режим. Используйте переменную, используя синтаксис Razor в моем html, но это будет работать только на моей странице редактирования, а не на странице создания. Кроме того, он не будет работать, когда я нажму на флажок (мне нужно будет перезагрузить его новыми значениями в раскрывающемся списке).

Я надеялся избежать публикации на сервере с помощью jQuery и вместо этого сделать все это на стороне клиента. Однако, если это ТОЛЬКО способ сделать это, может кто-то помочь в КАК это сделать.

ответ

4

Я надеялся избежать публикации на сервере с помощью jQuery и вместо этого сделать все это на стороне клиента.

У вас может быть 2 списка, сериализованные непосредственно в вашем представлении. А затем подпишитесь на событие .change и установите значения выпадающего списка:

<script type="text/javascript"> 
    // This assumes that ViewBag.List1 and ViewBag.List2 are IEnumerable<SelectListItem> 
    var list1 = @Html.Raw(ViewBag.List1); 
    var list2 = @Html.Raw(ViewBag.List2); 

    $(function() { 
     $('#Adults').change(function() { 
      var checked = $(this).is(':checked'); 
      setDropDownValues(checked); 
     }); 
    }); 

    function setDropDownValues(checked) { 
     var dropDown = $('#id_of_your_drop_down'); 
     dropDown.empty(); 
     var list = checked ? list1 : list2; 
     $.each(list, function() { 
      dropDown.append('<option/>', { 
       value: this.Value, 
       html: this.Text 
      }); 
     }); 
    } 
</script> 
+0

Кажется, что мне нужно! Как узнать идентификатор моего раскрывающегося списка и идентификатор флажка, если они динамически созданы? – MichaelMcCabe

+0

Вы можете явно установить их: '@ Html.DropDownListFor (x => x.SomeProperty, Model.SomeCollection, new {id =" some_id "})'. Для CheckBox вы, кажется, используете EditorFor, который не позволяет вам устанавливать атрибуты html. Вы можете либо обернуть его в поле «» с определенным идентификатором, а затем адаптировать свой селектор или написать собственный шаблон редактора, который позволит вам установить идентификатор. –

+0

Идентификатор, похоже, создается во время выполнения, как имя переменной, для которой он является редактором. Так что в этом случае Взрослые. Однако функция не срабатывает при изменении. Нужно ли добавлять что-то еще? – MichaelMcCabe

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