2010-05-27 3 views
0

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

Если бы я использовал то, к чему я привык, ASP.NET MVC, у меня будет функция javascript, которая будет вызываться в первом списке выпадающего списка и будет делать ajax-вызов метода контроллера (передача в выбранном идентификатор родительской категории), который будет захватывать все дочерние категории этой родительской категории и возвращать их в JSON. Затем в функции javascript callback я бы оценил JSON и заполнил второй раскрывающийся список дочерними категориями.

Как бы это сделать, используя MonoRail/jQuery? Вот код, который я до сих пор:

$FormHelper.Select("business.category.id", $categories, "%{value='id', text='name', firstoption='Select a Category'}") 

$FormHelper.Select("business.category.id", $childCategories, "%{value='id', text='name', firstoption='Select a Sub-Category'}") 

Тогда в BusinessController.cs:

private void AddDataToModels() 
     { 
      PropertyBag["categories"] = CategoryRepository.GetParentCategories(); 
      PropertyBag["childCategories"] = CategoryRepository.GetChildCategories(1); 
} 

Спасибо за любой вход на том, как подойти к этому!

Джастин

ответ

0

Смотрите, если это один помогает:

http://ayende.com/Blog/archive/2007/10/08/Cascading-Drop-Downs-in-MonoRail.aspx

+0

Спасибо, я действительно видел эту статью после публикации, но он использует файл .ashx для выполнения вызова на стороне сервера из ajax. Как я могу назвать действие контроллера из ajax? Это дает мне «MonoRail не смог разрешить экземпляр механизма просмотра для шаблона ...» – Justin

+0

Вот быстрый пост, который я сделал некоторое время назад, используя ajax из Monorail. Он использует прототип, но такая же концепция будет работать и для jQuery: http://weblogs.asp.net/psteele/archive/2008/09/15/easy-ajax-with-monorail.aspx – PatrickSteele

+0

Этот метод wasn ' t хорошо для моей ситуации, так как она в основном возвращает весь вид, напоминает мне слишком много панелей обновлений из ASP.NET. Я искал способ вернуть JSON обратно и разобраться с этим, а не с целым взглядом. Тем не менее, я даю вам ответ, так как вы получили меня на правильном пути и были единственными, кто ответил, спасибо за вашу помощь! – Justin

0

Вот ответ для других, которые хотят вызвать действия контроллера из JQuery и вернуть JSON ...

Метод контроллера :

[return: JSONReturnBinder(Properties = "Id,Name")] 
     public BusinessType[] GetChildBusinessTypes(int parentId) 
     { 
      var businessTypes = BusinessTypeRepository.GetChildBusinessTypes(parentId); 
      return businessTypes; 
     } 

J avascript:

$(document).ready(function() { 
     $('#business_parentbusinesstype_id').change(function() { 
      jQuery.ajax({ 
       url: "$UrlHelper.For("%{action='$business.site.id/GetChildBusinessTypes'}")", 
       data: { parentId: $('#business_parentbusinesstype_id').val() }, 
       dataType: 'json', 
       type: 'GET', 
       success: fillChildBusinessTypes, 
       error: ajaxError 
      }); 
     }); 
    }); 

    function fillChildBusinessTypes(json) { 
     //get business types. 
     var businessTypes = eval(json); 
     //bind business types to dropdown. 
     $("#business_businesstype_id").get(0).options.length = 0; 
     $("#business_businesstype_id").get(0).options[0] = new Option("Select a Business Type", "0"); 
     jQuery.each(businessTypes, function(index, item) { 
      $('#business_businesstype_id').get(0).options[$("#business_businesstype_id").get(0).options.length] = new Option(item.Name, item.Id); 
     }); 
     //show child dropdown. 
     Show($('#spnChildBusinessTypes')); 
    }