IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

echanges entre javascript et controller


Sujet :

ASP.NET MVC

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 31
    Par défaut echanges entre javascript et controller
    bonjour,

    je suis bloqué depuis deux jours sur un problème surement très simple, mais je ne trouve pas de solutions.
    je précise que je débute en web, je fais du client lourd d'habitude.

    j'ai un select dans mon application, je veux récupérer la valeur sélectionné par l'utilisateur et l'envoyer a une méthode de mon controleur.
    j'arrive a récupérer la valeur, mais je ne trouve pas comment l'envoyer a ma méthode.

    voila le JS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script type="text/javascript">
        function saveLocalisation() {
            var SelectionWorkshop = $('#SelectWorkshop option:selected').val();
            var SelectionMachine = $('#SelectMachine option:selected').val();
            $.get('/CreateDtn/saveLocalisation?w=' + SelectionWorkshop + '&m=' + SelectionMachine);
        }
    </script>
    les select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    @Html.Label("SelectWorkshop", "Atelier")
                <select id="SelectWorkshop" class="form-control">
                    @foreach (DTN.Models.Workshop m in Model.listWorkshop)
                    {
                        <option value=@m>@m.name</option>
                    }
                </select>
                <br />
                @Html.Label("SelectMachine","Machine / Bureau / Salle")
                <select id="SelectMachine" class="form-control">
                    @foreach (DTN.Models.Machine m in Model.listMachine)
                    {
                        <option value=@m>@m.name</option>
                    }
                </select>
    la ligne qui appele mon JS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" value="Suivant" onclick="saveLocalisation" class="btn btn-large col-lg-12 col-md-12 col-sm-12 col-xs-12" />
    et enfin la methode de mon controler que je veux appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            public RedirectToRouteResult saveLocalisation(Workshop w, Machine m)
            {
                if (Session["CreateDtn"] == null)
                {
                    Session["CreateDtn"] = new Dtn(DateTime.Now);
                }
                ((Dtn)Session["CreateDtn"]).Workshop = w;
                ((Dtn)Session["CreateDtn"]).Machine = m;
                return RedirectToAction("selectStep", new { step = 4 });
            }
    voila, si une ame charitable veut bien m'aider^^

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Ton action dans ton controller ne fonctionnera pas vu que tu passes en parametre d'url 2 string alors que ton action s'attend à récupérer un workshop & une machine.
    Remplace les types d'arguments de ton action par "string" et ca devrait fonctionner...

  3. #3
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 940
    Par défaut
    J'ai l'impression que tu mélanges deux approches contradictoires : d'un côté dans ton JavaScript tu utilises de l'Ajax ($.get(...);) et de l'autre dans ton contrôleur tu as une approche plus classique formulaire et redirection (RedirectToAction("selectStep", new { step = 4 })). Tu devrais t'en tenir à une seule : soit tu fais une simple soumission de formulaire, avec une action post dans ton contrôleur qui redirige vers une action get si tout va bien et renvoie la même action en cas de problème ; ou un appel ajax avec une action qui renvoie un JsonResult, contenant une propriété donnant le succès et une url de redirection, utilisée par un callback JavaScript côté client ($.get(...).done(function(data){if(data.success) window.location = data.url;}), ou une liste d'erreurs en cas d'échec.

    Contrôleur dans le premier cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class ProductController
    {
      [HttpGet]
      public ActionResult Add(){return View(); }
     
      [HttpPost]
      public ActionResult Add(Product product)
      {
        try{ Services.Products.Add(product); return RedirectToAction("Details", product.Id); }
        catch(Exception e) { return View(product); }
      }
     
      [HttpGet]
      public ActionResult Details(int id) { return View(Services.Products.Read(id)); }
    }
    Contrôleur dans le second cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class ProductController
    {
      [HttpGet]
      public ActionResult Add(){return View(); }
     
      [HttpPost]
      public ActionResult AddAjax(Product product)
      {
        try{ Services.Products.Add(product); return Json(new {success = true, url = Url.Action("Details", product.Id)}); }
        catch(Exception e) { return Json(new {success = false, errors = e.Data["Errors"]}); }
      }
     
      [HttpGet]
      public ActionResult Details(int id) { return View(Services.Products.Read(id)); }
    }

Discussions similaires

  1. [MVVM] Echange entre deux controls
    Par dacid dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 11/12/2015, 12h20
  2. javascript du controle
    Par ridondo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/11/2005, 11h45
  3. Réponses: 2
    Dernier message: 08/08/2005, 21h30
  4. Conflit entre javascript et script ASP
    Par Mvu dans le forum ASP
    Réponses: 2
    Dernier message: 22/02/2005, 16h28
  5. [c-linux]echange entre 2 sockets
    Par .:dev:. dans le forum Développement
    Réponses: 2
    Dernier message: 11/06/2004, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo