Search code examples
asp.net-mvcasp.net-mvc-4razorcascadingdropdowncascading

mvc 4 missing anything on these cascading dropdowns


hello good evening everybody I am trying to get data when one of my dropdown selected index change here are my codes I couldn't get where am ı missing or doing something wrong I am very glad if you help me thank you .

this is my script code

$("#ddOrder").change(function (e) {
            alert = "basıldı";
            var oID = $(this).val();
            $.getJSON("../Accessory/loadWorkshops", { _orderId: oID },
                   function (data) {
                       var select = $("#ddAcc");
                       select.empty();
                       select.append($('<option/>', {
                           value: 0,
                           text: "Aksesuar seçiniz"
                       }));
                       $.each(data, function (index, itemData) {
                           select.append($('<option/>', {
                               value: itemData.Value,
                               text: itemData.Text
                           }));
                       });
                   });
        });

these are my controller codes

public ActionResult addAccessoryShipment()
    {
        if (Session["_userName"] == null)
        {
            return RedirectToAction("Index", "Home");
        }

        HelperPartial _helper = new HelperPartial(
            ViewData,
            Session["_userName"].ToString(),
            Session["_userPermissionId"].ToString()
            );

        Repository<Order> _ro = new Repository<Order>();
        IEnumerable<SelectListItem> _orderSelectListItem = _ro.All().AsEnumerable().Select(s => new SelectListItem
        {
            Text = s.code,
            Value = s.id.ToString()
        }).OrderBy(o => o.Text);

        ViewData["ddOrder"] = _orderSelectListItem;

        Repository<AccessoryList> _ra = new Repository<AccessoryList>();
        IEnumerable<SelectListItem> _clothSelectListItem = _ra.All().AsEnumerable().Select(s => new SelectListItem
        {
            Text = s.name,
            Value = s.id.ToString()
        }).OrderBy(o => o.Text);

        ViewData["ddaList"] = _clothSelectListItem;


        return View();
    }

    [AcceptVerbs(HttpVerbs.Get)]
    public JsonResult loadWorkshops(string _orderId)
    {
        //IEnumerable<MyCustomerProductType> _myCustomerProductType = _rc.All().Select(s => new MyCustomerProductType { id = s.id, customerName = s.customer.name, productTypeName = s.productType.name });

        int _oId = Convert.ToInt32(_orderId);

        Repository<OrderCloth> _ra = new Repository<OrderCloth>();

        IEnumerable<MyOrderCloth> _clothSelectListItem = _ra.All().Where(o => o.orderId == _oId).Select(s => new MyOrderCloth
        {
            workshopName = s.workshop.name,
            workshopId = s.workshopId
        });

        List<SelectListItem> _workshopListItem = new List<SelectListItem>();

        foreach (MyOrderCloth item in _clothSelectListItem)
        {
            _workshopListItem.Add(new SelectListItem
            {
                Text = item.workshopName,
                Value = item.workshopId.ToString()
            });
        }

        //ViewData["ddwList"] = _workshopListItem;

        return Json(_workshopListItem, JsonRequestBehavior.AllowGet);
    }

and here are my view codes

  @using (Html.BeginForm("AccessoryShipmentAdd", "Accessory", FormMethod.Post))
{
        @Html.ValidationSummary(true)

    <div class="control-group">
        <label class="control-label">Sipariş No</label>
        <div class="controls">
            @Html.DropDownListFor(model=>model.orderId,(IEnumerable<SelectListItem>)ViewData["ddOrder"],"seçim yapınız",new {id="ddOrder", @class = "span6 chosen"})
        </div>
        @Html.ValidationMessageFor(model => model.orderId)
    </div>

    <div class="control-group">
        <label class="control-label">Atölye Seçiniz</label>
        <div class="controls">
            @Html.DropDownListFor(model=>model.workshopId,new SelectList(Enumerable.Empty<SelectListItem>(),"workshopId","workshopName"),"seçim yapınız",new {@id="ddAcc" ,@class = "span6 chosen"})
        </div>
        @Html.ValidationMessageFor(model => model.workshopId)
    </div>

    <div class="control-group">
        <label class="control-label">Aksesuar Seçiniz</label>
        <div class="controls">
            @Html.DropDownListFor(model=>model.accessoryListId,(IEnumerable<SelectListItem>)ViewData["ddaList"],"seçim yapınız",new { @class = "span6 chosen"})
        </div>
        @Html.ValidationMessageFor(model => model.accessoryListId)
    </div>

I can get datas from loadWorkshops class but it doesnt return to my dropdown. what can I do for this ?


Solution

  • Try this (change "/>" in option to ">"):

    $("#ddOrder").change(function () {
            var oID = $(this).val();
    
            $.getJSON("../Accessory/loadWorkshops", { _orderId: oID },
                function (resultData) {
                    var selectACC = $("#ddAcc");
                    selectACC.empty();
                    selectACC.append($('<option>', {
                        value: 0,
                        text: '-- Aksesuar seçiniz --'
                    }));
    
                    $.each(resultData, function (index, itemData) {
                        selectACC.append($('<option>', {
                            value: itemData.Value,
                            text: itemData.Text
                        }));
                    });
                });
        });
    

    Update your controller to something like this:

    //Place the fetching of data in private
    private IList<MyOrderCloth> GetClothOrders(int _orderId)
    {
        Repository<OrderCloth> _ra = new Repository<OrderCloth>();
    
        IList<MyOrderCloth> clothOrders = null;
    
        clothOrders = _ra.MyOrderCloth.Where(o => o.orderId == _orderId).ToList();
    
        return clothOrders;
    }
    
    //Accessed by Javascript
    [AcceptVerbs(HttpVerbs.Get)]
    public JsonResult loadWorkshops(string _orderId)
    {
        int id = 0;
    
        if (!string.IsNullOrEmpty(_orderId))
        {
            id = Convert.ToInt32(_orderId);
        }
    
        var clothList = GetClothOrders(id);
        var clothData = clothList.Select(a => new SelectListItem()
        {
            Text = a.workshopName.ToString(),
            Value = a.workshopId.ToString(),
        });
    
        return Json(clothData, JsonRequestBehavior.AllowGet);
    }