MonoRail - 从一个下拉列表中选择父类别,显示子类别下拉列表

时间:2010-05-27 01:06:56

标签: castle-monorail

我是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);
}

感谢您提供有关如何处理此问题的任何意见!

贾斯汀

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

对于那些希望从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'));
    }