Aggiornare dropdown collegata e view bag dopo change

di il
1 risposte

Aggiornare dropdown collegata e view bag dopo change

Salve a tutti ho un problema con l' aggiornamento di una dropdwonlist collegata ad un altra drop down list

la mia view è

<form asp-action="DipendentiModifica" id="FormAggDip" asp-route-id="@Model.Id" method="post" onsubmit="return jQueryAjaxAggDip(this);">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <input type="hidden" asp-for="Id" />

    @*Titoli Schede*@
    <div class="modal-header">
        <div class="tabbable">
            <ul class="nav nav-tabs" role="tablist" style="background: #93BA09 ">
                <li class="nav-item"><a class="nav-link text-body" href="#tab1" data-toggle="tab">Dati Anagrafici</a></li>
                <li class="nav-item"><a class="nav-link text-body" href="#tab2" data-toggle="tab">Dati Contrattuali</a></li>
                <li class="nav-item"><a class="nav-link text-body" href="#tab3" data-toggle="tab">Assunzioni</a></li>
            </ul>
        </div>
    </div>

    <div class="tab-content">
        <div class="tab-pane active" id="tab1">
            @*Scheda Generale*@
            <div class="tab-pane active" id="tab1">
  ...........


        </div>
        @*Dati Contrattuali*@
        <div class="tab-pane" id="tab2">
            @*Riga 1*@
            <div class="row">
                <div class="col-sm-5">
                    <div class="form-group">
                        <label class="control-label">Cantire di Lavoro</label>
                        <select class="form-control" id="Cantiere" name="Idcantiere" asp-for="Idcantiere" asp-items="ViewBag.DropCantieri">
                        </select>
                    </div>
                </div>
                <div class="col-sm-5">
                    <div class="form-group">
                        <label class="control-label">Comune del Cantiere</label>
                        <select class="form-control" id="ComuniCantiere" name="Idcomune" asp-for="Idcomune" asp-items="ViewBag.DropComuniCantiere"></select>
                    </div>
                </div>
            </div>
        </div>

        @*Assunzioni*@
        <div class="tab-pane" id="tab3">
 ......
            </div>
        </div>
    </div>

    <div class="modal-footer">
        @*Pulsante Modifica*@
        <div>
            <input type="submit" value="Conferma Modifica" form="FormAggDip" class="btn btn-primary" ; return true;" />
        </div>
    </div>
</form>
il controller è

//GET
        public async Task<IActionResult> DipendentiModifica(Guid? Id, Guid SelectedCantiere)
        {
            if (Id == null || Id == Guid.Empty)
            {
                return View(new Dipendente());
            }

            var DipendentiModifica = await context.Dipendenti.FromSqlRaw("SELECT * FROM Dipendenti").FirstOrDefaultAsync(m => m.Id == Id);

            if (DipendentiModifica == null)
            {
                return NotFound();
            }

            if (SelectedCantiere == Guid.Empty)
            {
                SelCantiere = DipendentiModifica.Idcantiere.ToString();
            }
            else
            {
                DipendentiModifica.Idcantiere = SelectedCantiere;
                SelCantiere = SelectedCantiere.ToString();
            }
            ViewBag.DropCantieri = new SelectList(GetDropCantieri(), "ID", "Denominazione"); // Viewbag
            ViewBag.DropComuniCantiere = new SelectList(GetDropComuniCantiere(SelectedCantiere= new Guid(SelCantiere)), "ID", "Denominazione"); // Viewbag

            return View(DipendentiModifica);
        }

//POPOLO la DropDownList Cantieri
        public IEnumerable<DropCantiere> GetDropCantieri()
        {
            var ListResult = context.DropCantieri.FromSqlRaw("SELECT ID, Denominazione FROM Cantieri").ToList();
            return ListResult;
        }
//POPOLO la DropDownList Cantieri
        public IEnumerable<DropComuneCantiere> GetDropComuniCantiere(Guid SelectedCantiere)
        {
            if (SelectedCantiere != Guid.Empty)
            {
                SelCantiere = SelectedCantiere.ToString();
            }

            Console.WriteLine(SelCantiere);
            var ListResult = context.DropComuniCantiere.FromSqlRaw("SELECT dbo.Comuni.ID, dbo.Comuni.Denominazione FROM Cantieri INNER JOIN Comuni ON Cantieri.IDComune = Comuni.ID " +
                "WHERE (Cantieri.ID= '"+ SelCantiere +"')").ToList();
            return ListResult;
        }
e lo script è

    $(document).ready(function () {
        $("#Cantiere").on("change", function () {
            var SelectedCantiere = $("#Cantiere").val();
        $.ajax
            ({
                type: 'GET',
                url: "GetDropComuniCantiere",
                data: { SelectedCantiere: SelectedCantiere },
                success: function (res) {
 		$('#ComuniCantiere').html();               },
                error: function (err) { console.log(err) }
            }),
       function (err) { console.log(err) };
        });
    });
quindi on change aggiorno il GetdropComuniCantieri e riesco a dare il nuovo valore al SelectdeCantiere nel controller,
ma con il codice

$('#ComuniCantiere').html();               },
Aggiorno la dropdown, ma non carica i dati aggiornati nel controller GetDropComuniCantiere quindi la dropdown mi risulta quindi credo dovrei mettere un reload per la viewbag che tra l altro si trova nella view "Modificadipendenti"...
mi sto incartando??

1 Risposte

  • Re: Aggiornare dropdown collegata e view bag dopo change

    eternityck ha scritto:


    Salve a tutti ho un problema con l' aggiornamento di una dropdwonlist collegata ad un altra drop down list
    [...]
    mi sto incartando??
    Più che altro, sembra che tu stia inserendo codice totalmente a caso, e ovviamente non è il modo per giungere alla risoluzione del problema.

    Ad esempio, l'uso del metodo html() di JQuery ce l'hai chiaro? Hai letto la documentazione a riguardo?

    E inoltre, chi ti dice che le azioni inserite nel Controller che restituiscono un IEnumerable<> ti vadano a produrre un contenuto HTML? A maggior ragione, come fai a sapere che questo HTML è valido per essere inserito in una DropDownList?

    Ti devi documentare in modo approfondito su questi concetti:
    • Funzionamento del Model Binding di ASP.NET
    • Restituzione di dati JSON/XML da un Controller
    • Uso del ViewModel al posto del ViewBag
    • Riempimento di una DropDownList da codice JavaScript (con o senza JQuery)
    Fatto questo, dovresti avere un bagaglio sufficiente ad affrontare la problematica con serenità.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
1 risposte