MonoRail - выберите родительскую категорию из одного раскрывающегося списка, покажите раскрывающуюся дочернюю категорию - PullRequest
0 голосов
/ 27 мая 2010

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

Если бы я использовал то, к чему я привык, ASP.NET MVC, у меня была бы функция javascript, которая вызывалась бы при замене первого выпадающего списка и делала бы вызов ajax методу контроллера (передавая выбранного родителя). ID категории), который будет захватывать все дочерние категории этой родительской категории и возвращать их в формате JSON. Затем в функции обратного вызова javascript я бы оценил 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);
}

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

Justin

Ответы [ 2 ]

0 голосов
/ 28 мая 2010

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

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

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

Javascript:

$(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'));
    }
0 голосов
/ 28 мая 2010
...