0

Ceci est mon problème.MVC: Action pour mettre à jour une partie du modèle, à partir d'une validation côté client

J'ai un modèle composé de deux structures.

public class MyDoubleStructureModel 

    { 
    public MyDoubleStructureModel(CLIENT MyClient, List<PROVIDER> MyProviders); 
    CLIENT MyClient {get;private set;}; 
    List<PROVIDER> MyProviders {get;private set;} ; 
    } 

Les deux objets sont chargés au début du chargement de la page. L'objet « MyProviders » remplit un RenderPartial:

<div id="dialog"> 
<% Html.RenderPartial("UCProviders", Model.MyProviders); %> 
<%} %> 
</div> 

Sur mon formulaire client, j'ai un dropdownlist, qui devrait permet à l'utilisateur, de mettre à jour les données incluses dans la vue partielle. Il doit être mis à jour sans recharger la vue.

Mon idée était d'appeler (par JQuery par exemple) une fonction côté serveur, qui ne mettrait à jour qu'une partie de mon modèle.

$("#ddlChangeProviders").change(function() { 
       $.ajax({ 
        type: "POST", 
        url: "/Client/UpdateListProvider/?provID=" + $("#ddlChangeProviders").val() 
       }); 

Mais je ne sais pas s'il est possible de mettre à jour, seule une partie de mon modèle (dans ce cas, la partie « fournisseurs »).

Une idée pour compléter mon code? Suis-je sur la bonne voie? Je suppose que la fonction « côté serveur « UpdateListProvider »(l'affichage d'une liste mise à jour des fournisseurs dans un PartialView) manque ...

C'est ce qui devrait être sur ma fonction UpdateListProvider

public ActionResult UpdateListProvider(int provID) 
{ 
    List<PROVIDER> MyProvidersInMyModel = _entities.Providers.Where(c => c.PROV_ID == provID).ToList(); 

    var model = new MyDoubleStructureModel(null, MyProvidersInMyModel) 

    return View(model); 
} 

Merci pour votre aide (Demandez-moi si la description n'est pas assez claire)

Répondre

0

Oui, vous pouvez mettre à jour des parties de votre modèle en utilisant jquery et avec un post de forme régulière aussi maintenant vous devez juste écrire UpdateListProvider ActionREsult et mettre à jour le champ ProviderID de votre modèle, vous pouvez éventuellement retourner vrai ou faux montrant que les données mis à jour avec succès ou non

public ActionResult UpdateListProvider(int porvID) 
{ 
    var model = //get model to update 
    model.provID = provID 
    if(Save(model))return Content("true"); 
    return Content("false"); 
} 

à côté client vous pouvez écrire le rappel de succès de ajax pour montrer une erreur ou un message succès

$("#ddlChangeProviders").change(function() { 
       $.ajax({ 
        type: "POST", 
        url: "/Client/UpdateListProvider/?provID=" + $("#ddlChangeProviders").val(), 
        success:function(data) 
          { 
           if(data == 'true'){alert('updated successfully');} 
           else{alert('could not update record');} 
          } 
       }); 
+0

Merci pour votre réponse. Pouvez-vous détailler, le "var model = // Obtenir le modèle à mettre à jour"? – PetersLast

+0

puisque votre but est de mettre à jour un modèle. Donc, quand vous avez la méthode provID in action, il vous suffit de récupérer le modèle en question depuis db etc. et de mettre à jour son champ provID. vous pouvez également passer un identifiant unique de votre modèle dans votre requête ajax afin que vous puissiez facilement obtenir l'objet modèle de db –

+0

Eh bien, je vais poser différemment ma question précédente, qui semble peut-être trop simple pour être vraie :)) : quel est le code de ligne, qui peut obtenir le "modèle actuel" utilisé (et rempli) du formulaire actuel? Le code 'complet' de la ligne: 'var model = // get model to update'? – PetersLast

Questions connexes