Monorail - Seleziona categoria principale da un menu a discesa, mostrano bambini della categoria a discesa

StackOverflow https://stackoverflow.com/questions/2917880

  •  04-10-2019
  •  | 
  •  

Domanda

Sono nuovo di monorotaia e sto cercando di capire come farlo in modo che posso selezionare una categoria principale in un menu a discesa, allora l'hanno mostrano una seconda discesa con le categorie che sono figli del genitore.

Se dovessi usare quello che mi sono abituato, ASP.NET MVC, che avrebbe una funzione JavaScript che sarebbe stato chiamato onchange della prima discesa e farebbe una chiamata AJAX a un metodo di controllo (passando nel genitore selezionato categoria id) che avrebbe afferrare tutte le categorie figlio di quella categoria genitore e restituirli in JSON. Poi nella funzione di callback JavaScript avrei eval il JSON e popolare la seconda tendina con le categorie del bambino.

Come potrei farlo usando monorotaia / jQuery? Ecco il codice che ho finora:

$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'}")

Poi nel BusinessController.cs:

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

Grazie per qualsiasi input su come affrontare questo!

Justin

Altri suggerimenti

Ecco la risposta per gli altri che stanno cercando di chiamare azioni di controllo da jQuery e ritorno JSON ...

Metodo di controllo:

[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'));
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top