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 :

Appeler une méthode en AJAX depuis une Vue User Control d'une Area


Sujet :

ASP.NET MVC

  1. #1
    Membre habitué Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Points : 136
    Points
    136
    Par défaut Appeler une méthode en AJAX depuis une Vue User Control d'une Area
    Bonjour à tous,
    J'ai un projet ASP.NET, avec une AREA pour le code ASP.NET MVC 2.
    A la création de l'area, cela m'a créé un dossier "View" et un autre "Controller".

    Ma vue est une vue partielle, un ascx donc. A partir de cette vue, je cherche à taper dans une méthode de mon controleur en ajax.

    Voici mon code depuis la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <script type="text/javascript">
        $("#<%=btnSearch.ClientID %>").click(function() {
            var text = $("#<%=tbSearchBox.ClientID %>").val;
            $.ajax({
                type: "GET",
                url: '/Areas/Settings/User/SearchUser',
                success: function(msg) {
                    alert("toto");
                }
            });
        });
    </script>
    Areas étant le nom du dossier Area, Settings, le nom du dossier contenant les dossier controller et view, User étant un controller du dossier Controller (UserController) et SearchUser est la méthode que j'essaie d'appeller.

    Pour le moment cette méthode ne contient juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            /// <summary>
            /// Évènement déclenché lors de la recherche d'un utilisateur.
            /// </summary>
            /// <param name="text">Le texte à chercher.</param>
            /// <returns>OK</returns>
            public string SearchUser(string text)
            {
                return "OK";
            }
    J'obtiens pour le moment dans Chrome :
    Avez-vous une idée de comment réaliser cela ?

    Merci d'avance pour votre aide !

  2. #2
    Membre averti
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 349
    Points
    349
    Par défaut
    Bonjour,

    Il me semble que l'adresse est incorrecte, tu ne dois pas mettre l'url vers le chemin "physique" de ton action mais plutôt la "route".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url: 'Settings/User/SearchUser'
    devrait fonctionner si tu n'a pas modifié les routes.

  3. #3
    Membre habitué Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Points : 136
    Points
    136
    Par défaut
    Bonjour,
    Merci pour ta réponse, ça fonctionne très bien à une donné près, vu que sous IIS, l'application web est un répertoire virtuel converti en application et porte le nom 'V2', la bonne url est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    url: '/V2/Settings/User/SearchUser',
    Par contre, j'ai une seconde question.

    Ici, j'appelle une méthode de mon controller. Par contre, ma vue est lié à un model :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MdbProcurement.Adoria.Web.Settings.Models.UserTreeViewModel>" %>
    Ce model contient des méthodes et propriétés.

    Si par hasard je désire appeler une méthode de ce model, je met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%=Model.SearchUser("test")%>
    Or l'erreur suivante apparait :

    The ViewUserControl '~/Areas/UControls/Views/Slider/Slider.ascx' cannot find an IViewDataContainer object. The ViewUserControl must be inside a ViewPage, a ViewMasterPage, or another ViewUserControl.
    Si j'enlève le paramètre dans l'appel de la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%=Model.SearchUser("")%>
    J'obtiens ce message d'erreur.
    Aucune surcharge pour la méthode 'SearchUser' ne prend d'arguments '0'
    Il arrive bien à me retrouver l'existence d'une méthode, mais je ne peux utiliser les balises <% %>

    Aurais-tu une explication et une solution pour ce problème ?

  4. #4
    Membre habitué Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Points : 136
    Points
    136
    Par défaut
    Il semblerait que ce soit à cause de l'implémentation de mon userControl.
    Depuis ma view webform, j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <adoria:UserSlider runat="server" ID="SliderTreeView" />
    En incluant la directive Register :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%@ Register TagPrefix="adoria" TagName="UserSlider" Src="~/Areas/UControls/Views/Slider/Slider.ascx" %>
    Il faudrait que j'utilise Html.RenderPartial, mais je ne suis pas sur que ce soit possible.

    Qu'en penses-tu ?

    Merci par avance de tes réponses !

  5. #5
    Membre averti
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 349
    Points
    349
    Par défaut
    Je suppose que tu utilise MVC avec les Pages ".aspx" que je n'ai jamais utilisé...

    Par contre ce qui m'étonnes c'est que tu dis que ton modèle contient des méthodes que tu voudrais appeler depuis une vue... Or en toute logique, ton modèle ne devrait contenir uniquement des propriétés.

    Pour rappel :

    Model -> Propriétés
    View -> Vue "Html"
    Controller -> Actions/Méthodes

  6. #6
    Membre habitué Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Points : 136
    Points
    136
    Par défaut
    Tout à fait d'accord avec toi, par contre, si je veux afficher la valeur des propriétés dans ma View, données qui ont été remplies dans les différentes méthodes de mon contrôleur, je ne pourrais, pas à cause de l'erreur précédente.

    Comment remédier à ce problème ?

    Merci par avance de tes réponses !

  7. #7
    Membre habitué Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Points : 136
    Points
    136
    Par défaut
    Bonjour,
    Pour conclure, je peux en fait utiliser l'expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%=Model.MaPropriété %>
    Merci pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/05/2014, 08h16
  2. Réponses: 1
    Dernier message: 26/03/2011, 14h07
  3. Réponses: 9
    Dernier message: 10/05/2007, 17h57
  4. [C#] Exécuter une méthode apsx.cs depuis un ascx
    Par bendj dans le forum ASP.NET
    Réponses: 12
    Dernier message: 12/07/2005, 11h18

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