MonoRail - как вызвать метод на стороне сервера из jQuery - PullRequest
0 голосов
/ 28 мая 2010

Я пытаюсь вызвать действие на стороне сервера в контроллере из jQuery:

$.ajax({
            url:'http://localhost:88/admin/business/11/GetChildBusinessTypes',
            data: { parentId: $('#business_parentbusinesstype_id').val() },
            dataType: 'json',
            success: fillChildBusinessTypes,
            error: ajaxError
        });

Вот действие контроллера:

public string GetChildBusinessTypes(int parentId)
        {
            //get child business types.
            var businessTypes = BusinessTypeRepository.GetChildBusinessTypes(parentId);
            //convert to JSON.
            var serializer = new JavaScriptSerializer();
            return serializer.Serialize(businessTypes);
        }

Это дает мне эту ошибку:

MonoRail не удалось разрешить экземпляр механизма просмотра для шаблона 'admin \ business \ GetChildBusinessTypes'. Возможны две причины: либо шаблон не существует, либо механизм просмотра, который обрабатывает определенное расширение файла, не настроен правильно web.config (раздел монорельса, узел viewEngines).

Ясно, что он пытается получить действие, как если бы оно было представлением, и выдает ошибку. Я попытался отправить его как POST вместо GET, но получил тот же самый rror. Что мне нужно сделать, чтобы заставить это работать?

Спасибо! Джастин

1 Ответ

1 голос
/ 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'));
    }
...