none
problemi funzione JSON con MVC - update model da DropDownList RRS feed

  • Domanda

  •  
    Salve a tutti!

    Premetto che la mie esperienze con ASP.Net risalgono ad un discreto numero di anni fa e sono ai primi passi con MVC.

    Mi trovo a lavorare su un progetto altrui fatto appunto in ASP.Net MVC e mi sto rompendo la testa su questo problema:

    Ho una vista con due DropDownList, una deve contenere i Distributori, l'altra i Venditori relativi al Distributore selezionato nella prima DropDownList.

    Per realizzare questo il programmatore che mi ha preceduto ha scritto questo codice:


    Nel Body:

    <tr>
       <td>
          <span>Distributore</span>
       </td>
       <td>
          @Html.DropDownList("DistributorID")
          @Html.ValidationMessageFor(model => model.DistributorID)
       </td>
    </tr>
    <tr>
       <td>
          <span>Venditore</span>
       </td>
       <td class="tdAlignLeft">                    
          @Html.DropDownList("VendorCode")
          @Html.ValidationMessageFor(model => model.ClientHeaderInformation.VendorCode)
       </td>
    </tr>


    Nello Script:

    $("#DistributorID").change(function (e) {

       var SelectGroupId =$(this).val();

       $.getJSON('@Url.Action("VendorByDistributor", "ClientInfo")', { VendorGroup: DistributorID }, function (param) {
          var vendorCodes = $('#VendorCode');
          vendorCodes.empty();
          $.each(param, function (index, param) {
             vendorCodes.append(
                $('<option/>')
                   .attr('value', param.vendorCode)
                   .text(param.vendorName)
             );
          });
       });
    });


    Nel Controller:

    public ActionResult VendorByDistributor(int _DistributorID)
    {
       var Vendors = db.View_Vendors.Where(n => n.DistributorID.Equals(_DistributorID)).Select(
          x => new
          {
             vendorCode = x.VendorCode,
             vendorName = x.VendorName
          });
       return Json(Vendors, JsonRequestBehavior.AllowGet);
    }


    'View_Vendors' è una vista di SQL Server mappata con Entity Framework, questo è l'SQL:

    SELECT A.DistributorID, A.DistributorName, B.VendorName, B.VendorCode
    FROM dbo.Distributors AS A LEFT OUTER JOIN dbo.Vendors AS B ON
    A.VendorCode = dbo.Vendor.VendorCode


    Tutto sembra funzionare, ma quando salvo la View in alcuni casi la proprietà VendorCode della classe ClientInfo non contiene il valore aggiornato. Questo succede se cambio Distributore sulla prima DropDownList. In questo caso la seconda DropDownList si carica dei giusti valori, ma non tiene aggiornata la proprietà del Model che mantiene il suo primo valore fino al salvataggio.

    Ho provato anche a mettere una funzione per testare l'evento 'change' della DropDownList ...

    $("#VendorCode").change(function (e) {
       var SelectId =$(this).val();
       $.getJSON('@Url.Action("updateVendorCode", "ClientInfo")', { VendorCodePass: SelectId });
    });

    ... e in effetti l'evento scatta sempre solo se non cambio Distributore e non ricarico gli items dei Venditori, in quel caso scatta solo la prima volta.

    Sembrerebbe un problema di refresh della seconda DropDownList, ma non so proprio come risolvere...

    Pileggi



    • Modificato pileggi giovedì 11 aprile 2013 16:25
    giovedì 11 aprile 2013 16:03

Risposte

  • Ok, scusate, era un problema molto banale che non c'entra niente con come è stato scritto il codice:

    semplicemente veniva usato il campo sbagliato... VendorCode al posto di VendorNumber... :-)

    a volte ti sfugge la soluzione più sempice...

    il post non lo elimino perché quel codice era stato scritto bene, e magari può essere utile anche ad altri...

    Saluti!

    Pileggi

    • Contrassegnato come risposta pileggi venerdì 12 aprile 2013 14:22
    venerdì 12 aprile 2013 14:22