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 :

G�n�rer des url "clean" avec RouteUrl


Sujet :

ASP.NET MVC

  1. #1
    Membre � l'essai Avatar de gerardlecloerec
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2013
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Par d�faut G�n�rer des url "clean" avec RouteUrl
    Bonjour � tous,

    Je ne comprend pas bien comment fonctionne les RouteUrl.

    Voici mon code, si jamais il manque des choses, j'�diterai mon post pour l'ajouter directement dedans.

    Ce que je cherche � faire c'est de g�n�rer des URLs de cette forme : LocalHost:12345/Mode/Femmes/Robes/Robe-Moulante/
    Le probl�me c'est que quelque sois la fa�on dont je g�n�re l'url dans mon fichier de vue en razor l'url sois ressemble � �a LocalHost:12345/ListOrGrid/ListOrGrid/4?UrlFomer=Mode/Femmes/Robes/RobeMoulante/ ou bien le href de mon <a> est juste vide � la g�n�ration Oo

    Le contenu de ce que j'envoie pour les ID provient d'une table qui � cette forme :

    id id_Parent Nom_Categorie
    1 Mode
    2 1 Femmes
    3 2 Robes
    4 3 RobeMoulante


    ListOrGridController.cs

    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
    16
    17
     
    public ActionResult ListOrGrid(short categorieID = 1)
            {
                List<ArticlePrevisualisation> articlePrevisualisation = new List<ArticlePrevisualisation>();
     
                //foreach (var item in collection)
                //{
                //    ArticlePrevisualisation artPrev = new ArticlePrevisualisation();
                //    ARTICLES_DEFINITIONSet aRTICLES_DEFINITIONSet = new ARTICLES_DEFINITIONSet();
                //    aRTICLES_DEFINITIONSet = db.ARTICLES_DEFINITIONSet.Where(w => w.);
                //    ARTICLESSet aRTICLESSet = new ARTICLESSet();
                //    articlePrevisualisation.Add(artPrev);
                //}
     
     
                return View();
            }
    RouteConfig.cs

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
     
     
                routes.MapRoute(
                    name: "Index",
                    url: "",
                    defaults: new { controller = "Home", action = "Index" });
     
     
                routes.MapRoute(
                    name: "Categorie",
                    url: "{urlFormer}",
                    defaults: new { controller = "ListOrGrid", action = "ListOrGrid", id = UrlParameter.Optional, urlFormer = UrlParameter.Optional }
                );
     
     
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }
        }
    GlobalFunction.cs

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
     
        /// <summary>
        /// forme une url propre sans caractère spéciaux ni accent
        /// </summary>
        /// <param name="EntryUrl"></param>
        /// <returns></returns>
        public static string FormatUrl(string EntryUrl)
        {
            string ExitUrl = EntryUrl;
            ExitUrl = ExitUrl.Replace(" ", "");
            ExitUrl = ExitUrl.Replace("-", "");
            ExitUrl = ExitUrl.Replace("%", "");
            ExitUrl = ExitUrl.Replace("/", "");
            ExitUrl = ExitUrl.Replace("&", "");
            ExitUrl = ExitUrl.Replace("'", "");
            ExitUrl = ExitUrl.Replace("__", "");
            ExitUrl = ExitUrl.Replace("_", "");
            ExitUrl = ExitUrl.Replace("é", "e");
            ExitUrl = ExitUrl.Replace("à", "a");
            ExitUrl = ExitUrl.Replace("ù", "u");
            ExitUrl = ExitUrl.Replace("è", "e");
            ExitUrl = ExitUrl.Replace("ä", "a");
            ExitUrl = ExitUrl.Replace("â", "a");
            ExitUrl = ExitUrl.Replace("ê", "e");
            ExitUrl = ExitUrl.Replace("ë", "e");
            ExitUrl = ExitUrl.Replace("ï", "i");
            ExitUrl = ExitUrl.ToLower();
            return ExitUrl;
        }
     
        /// <summary>
        /// Récupère la liste des noms des catégories parentes pour former l'url
        /// </summary>
        /// <param name="categorieID"></param>
        /// <returns>String formaté avec les noms des catégories récupérées</returns>
        public static string nomCategories(short categorieID)
        {
            string url = "";
            try
            {
                List<short> listIdCategorieURL = new List<short>();
                do
                {
                    short catId = new short();
                    catId = db.CATEGORIESSet.Where(w => w.Categorie_Id == categorieID).Select(s => s.Categorie_Id).FirstOrDefault();
                    int i = 0;
                    listIdCategorieURL.Add(catId);
                    categorieID = new short();
                    categorieID = db.CATEGORIE_PARENTSSet.Where(w => w.Categorie_Id == categorieID).Select(s => s.Categorie_ParentId).FirstOrDefault();
                } while (categorieID != 0);
     
     
                listIdCategorieURL.Reverse();
     
     
                foreach (short item in listIdCategorieURL)
                {
                    if(listIdCategorieURL.Last() == item)
                        url += nomCategorie(item);
                    else
                        url += nomCategorie(item) + "/";
                }
     
     
                return url;
            }
            catch(ArgumentNullException ex)
            {
                Debug.WriteLine(ex);
                return "";
            }
            catch(InvalidOperationException ex)
            {
                Debug.WriteLine(ex);
                throw ex;
            }
            catch(NullReferenceException ex)
            {
                Debug.WriteLine(ex);
                return "";
            }
            catch(EntityException ex)
            {
                db.Dispose();
                Debug.WriteLine(ex);
                return "";
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                throw ex;
            }
        }
    _Layout.cshtml

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    <a href="@Url.RouteUrl("Categorie", new { id = cat.Categorie_Id, urlFormer = GlobalFunction.FormatUrl(GlobalFunction.nomCategories(cat.Categorie_Id)) })" class="level-top"><span>@cat.Categorie_Intitule</span> </a>
    Je pense avoir tout donn� !

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

    Informations professionnelles :
    Activit� : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par d�faut
    L'�l�ment default de ta route "Categorie" n'est pas coh�rent avec ce que tu essaies d'obtenir ; de plus tu ne peux pas avoir un controller et une action qui ont le m�me nom puisque controller est un nom de classe, action un nom de m�thode et la seule m�thode ayant le m�me nom que sa classe est le constructeur. Par ailleurs, tu ne places pas l'id de la cat�gorie dans ton exemple d'Url.

  3. #3
    Membre � l'essai Avatar de gerardlecloerec
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2013
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Par d�faut
    L'�l�ment default de ta route "Categorie" n'est pas coh�rent avec ce que tu essaies d'obtenir
    Hum Noxen ce n'est pas la route "Default" qu'il faut regarder mais la route nomm� "Categorie", c'est par celle l� que je souhaite passer.

    [FONT=Verdana, sans-serif]tu ne peux pas avoir un controlleur et une action qui ont le m�me nom puisque controller est un nom de classe, action un nom de m�thode et la seule m�thode ayant le m�me nom que sa classe est le constructeur.[/FONT]
    Il n'y a aucun soucis ici, je le sais tr�s bien que normalement on ne peux pas faire �a mais ici Visual Studio ne semble pas m'en emp�cher puisque �a fonctionne, je le changerai si c'est ce qui te d�range ^^

    Par ailleurs, tu ne places pas l'id de la cat�gorie dans ton exemple d'Url.
    J'utilise =>
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    @Url.RouteUrl("Categorie", new { id = cat.Categorie_Id, urlFormer = GlobalFunction.FormatUrl(GlobalFunction.nomCategories(cat.Categorie_Id)) }) // Je passe bien mon id ainsi que la forme de l'url que je souhaite obtenir 
    Url � obtenir -> LocalHost:12345/Mode/Femmes/Robes/Robe-Moulante/

    Ce que je r�cup�re ->
    LocalHost:12345/ListOrGrid/ListOrGrid/4?UrlFomer=Mode/Femmes/Robes/RobeMoulante/ ou Vide
    Controller/ Action /id/param�tre suppl�mentaire

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

    Informations professionnelles :
    Activit� : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par d�faut
    Citation Envoy� par gerardlecloerec Voir le message
    Hum Noxen ce n'est pas la route "Default" qu'il faut regarder mais la route nomm� "Categorie", c'est par celle l� que je souhaite passer.
    Je ne parle pas de la route "Default", mais bien de la propri�t� defaults de ta route "Categorie" :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    routes.MapRoute(
      name: "Categorie",
      url: "{urlFormer}",
      defaults: new { controller = "ListOrGrid", action = "ListOrGrid", id = UrlParameter.Optional, urlFormer = UrlParameter.Optional }
    );
    Citation Envoy� par gerardlecloerec Voir le message
    Url � obtenir -> LocalHost:12345/Mode/Femmes/Robes/Robe-Moulante/
    Dans cette Url, quelle est la partie qui contient l'id de la cat�gorie ? Moi je ne vois que les noms des cat�gories et sous-cat�gories.

  5. #5
    Membre � l'essai Avatar de gerardlecloerec
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2013
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Par d�faut
    Envoy� par gerardlecloerec
    Hum Noxen ce n'est pas la route "Default" qu'il faut regarder mais la route nomm� "Categorie", c'est par celle l� que je souhaite passer.
    Je ne parle pas de la route "Default", mais bien de la propri�t� defaults de ta route "Categorie" :
    Explique toi sur ce qui n'est pas coh�rent, je ne comprend pas le probl�me c'est pour �a que j'ai pos� ma question � la base ^^

    Envoy� par gerardlecloerec
    Url � obtenir -> LocalHost:12345/Mode/Femmes/Robes/Robe-Moulante/


    Dans cette Url, quelle est la partie qui contient l'id de la cat�gorie ? Moi je ne vois que les noms des cat�gories et sous-cat�gories.
    Justement je ne veux pas que l'id s'affiche dans l'url mais qu'il soit envoyer de fa�on transparente, comme un POST et non un GET, j'ai d� mal m'exprimer.

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

    Informations professionnelles :
    Activit� : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par d�faut
    Je me suis un petit peu replong� dans le fonctionnement du routage ASP MVC, �a fait toujours du bien.

    Tout d'abord une question : est-ce-que l'url que tu veux utiliser fonctionne ? Parce-que d'apr�s les quelques informations que j'ai glan�es �a ne devrait pas �tre le cas.

    Ta route "Categorie" risque d'intercepter toutes les url � l'exception de l'url vide et la route "Default" ne sera pas utilis�es ; pour pallier � ce probl�me je te sugg�re d'utiliser un "pr�fixe", par exemple "Categories". Par ailleurs le nombre segments (�l�ments de l'url s�par�s par des "/") doit correspondre au nombre de param�tres d�clar�s dans le format de l'url ; pour qu'un param�tre r�cup�re tous les segments restant il faut le pr�fixer d'un "*". Ce qui donne au final :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    routes.MapRoute(
      name: "Categorie",
      url: "Categories/{*urlFormer}",
      defaults: new { controller = "Categorie", action = "ListOrGrid", urlFormer = UrlParameter.Optional }
    );
    La m�thode ListOrGrid de ton contr�leur Categorie prend en param�tre une string urlFormater :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    public ActionResult ListOrGrid(string urlFormater)
    Note que sans un attribut [HttpPost] la m�thode n'accepte que les requ�tes http "GET".

    Ce que tu cherches � faire, � savoir envoyer un id masqu� en plus de l'url ne me para�t pas possible ; c'est effectivement ce qu'on fait lors de la soumission d'un formulaire web, mais dans le cas pr�sent il s'agit d'un simple lien <a>, tu dois te d�brouiller avec la seule url. Mais avec ce que je te propose tu r�cup�reras une cha�ne compl�te ("Mode/Femmes/Robes/Robe-Moulante") que tu pourras analyser pour trouver l'item correspondant.

  7. #7
    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
    Tu devrais faire plutot une route de cette facon :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
     
     
                routes.MapRoute(
                    name: "Mode",
                    url: "{controller}/{action}/{filter1}/{filter2}"
                 );
    Dans ton controller

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
     
            // GET: Mode
            public ActionResult Femmes(string filter1, string filter2, int id)
            {
                return View();
            }
    ne pas oublier de mettre un champ (cach�, textbox, ou autre) dans ton form avec le name "Id"

    [EDIT]

    ne pas oubli� de mettre la route AVANT la route defaut. Les routes s'ajoutent du plus restrictif/unique au moins restrictif...

    [EDIT]

    A+

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

    Informations professionnelles :
    Activit� : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par d�faut
    L'url est fond�e sur une hi�rarchie d'articles, stock�s en base de donn�es, elle est dynamique, il ne peut pas savoir � l'avance combien de segments vont �tre pr�sents, donc il ne peut pas utiliser le pattern que tu proposes. Les champs de formulaire, cach�s ou non, �a marche avec les formulaires, ici il s'agit d'un simple hyperlien.

  9. #9
    Membre � l'essai Avatar de gerardlecloerec
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2013
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Par d�faut
    @Noxen

    Tout d'abord une question : est-ce-que l'url que tu veux utiliser fonctionne ? Parce-que d'apr�s les quelques informations que j'ai glan�es �a ne devrait pas �tre le cas.
    Oui l'url qui se g�n�re de cette forme : LocalHost:12345/ListOrGrid/ListOrGrid/4?UrlFomer=Mode/Femmes/Robes/RobeMoulante/ me redirige bien l� ou je le veux.

    Ta route "Categorie" risque d'intercepter toutes les url � l'exception de l'url vide et la route "Default" ne sera pas utilis�es ;
    Oui c'est bien le probl�me c'est pour �a que j'ai cr�er la route Index mais ce n'est pas une solution en sois.

    Par ailleurs le nombre segments (�l�ments de l'url s�par�s par des "/") doit correspondre au nombre de param�tres d�clar�s dans le format de l'url ; pour qu'un param�tre r�cup�re tous les segments restant il faut le pr�fixer d'un "*". Ce qui donne au final :
    Aurait-tu de la documentation sur ce '*' de pr�fixe ?

    Le nombre de segment dans le format de l'url c'est le nombre de param�tres apr�s le '?' ou bien le nombre de cat�gories que j'appel par la fonction qui g�n�re l'urlFomer ? Ou bien autres chose que je n'ai pas compris xD

    Ce que tu cherches � faire, � savoir envoyer un id masqu� en plus de l'url ne me para�t pas possible ; c'est effectivement ce qu'on fait lors de la soumission d'un formulaire web, mais dans le cas pr�sent il s'agit d'un simple lien <a>, tu dois te d�brouiller avec la seule url. Mais avec ce que je te propose tu r�cup�reras une cha�ne compl�te ("Mode/Femmes/Robes/Robe-Moulante") que tu pourras analyser pour trouver l'item correspondant.
    Mais les items je les r�cup�res d�j� puisque je passe mon id (.....
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    new { id = cat.Categorie_Id,
    ....) et ca fonctionne avec l'url ci-dessus mais c'est juste moche � l'affichage et pour les futur client du site que je d�veloppe. :/

    @Dokho1000

    Tu devrais faire plutot une route de cette facon :
    Non ce n'est pas du tout ce � quoi j'aspire pour mon url.

    Dans ton controller

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    
    // GET: Mode
    public ActionResult Femmes(string filter1, string filter2, int id)
    {
    return View();
    }
    C'est impossible que je fassent ceci c'est des cat�gories qui sont �crites dans une tables pas des contr�leurs unique qui sont g�n�r� � la vol� pour chaque categorie �a serait bien trop dure et je ne pense pas cela possible oO (ou peut-�tre que si ?)

    ne pas oubli� de mettre la route AVANT la route defaut. Les routes s'ajoutent du plus restrictif/unique au moins restrictif...
    �a je le savait, mais merci =D

  10. #10
    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
    Ok, j'avais pas compris qu'il n'y aurait pas de limite aux nombre de parametre, tu dois faire une route alors avec un parametre et une wildcard ex :

    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
    16
    17
    18
    19
     
     
     
     
                routes.MapRoute("infiniteFilters", "{*cats}", new { controller = "Mode", action = "Femmes" });
     
        public class ModeController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }
            // GET: filters
            public ActionResult Femmes(string categories)
            {
     
                return View();
            }
        }

  11. #11
    Membre � l'essai Avatar de gerardlecloerec
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2013
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    routes.MapRoute("infiniteFilters", "{*cats}", new { controller = "Mode", action = "Femmes" }); 
        public class ModeController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }
            // GET: filters
            public ActionResult Femmes(string categories)
            {
     
                return View();
            }     }
    Il n'y a aucun ModeController ni d'action Femmes, ni rien de ce genre, et il n'y en aura jamais.

    C'est une table pas un controller !

  12. #12
    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
    J'ai mis ca arbitrairement, tu peux t'en passer aussi...

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

    Informations professionnelles :
    Activit� : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par d�faut
    Quand je parle de segments d'url c'est en gros chaque �l�ment s�par� par un "/". Pour "Mode/Femmes/Robes/RobeMoulante/" tu aurais les segments Mode, Femmes, Robes et RobesMoulantes. Un segment peut �tre compos� de plusieurs param�tres, s�par�s par une constante, par exemple : "Mode/Femmes/Robes/RobeMoulante/bleue-courte-hivers", la dernier segment est compos� des trois param�tres bleue, courte et hivers.

    La wildcard dans les segments d'url pour la route je l'avais vue dans un bouquin, mais j'ai trouv� un article de la msdn qui mentionne cette possibilit� :
    https://msdn.microsoft.com/fr-fr/lib...0de%20segments

    Pour ce qui est du contr�leur et de la m�thode action c'est moi qui me suis tromp�, j'avais oubli� que le nom du contr�leur est suffix� du mot Controller, d'o� : ListOrGridController.ListOrGrid(categorieID).

    Concernant l'id, comme tu utilises un hyperlien tu es oblig� de l'inclure dans l'url si tu veux l'utiliser. Mais comme je disais, tu peux ne pas te baser sur l'id et � la place utiliser les segments de l'url comme codes pour identifier tes cat�gories et les r�cup�rer depuis ta base.

    Avec cette route :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    routes.MapRoute(
      name: "Categorie",
      url: "Categories/{*urlFormer}",
      defaults: new { controller = "ListOrGrid", action = "ListOrGrid", urlFormer = UrlParameter.Optional }
    );
    Si tu charges dans ta vue un mod�le ayant une propri�t� urlFormer, tu peux g�n�rer une url pour ta route avec quelque chose comme �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    @Url.RouteUrl("Categorie", new { urlFormer = Model.urlFormer})
    Tu peux m�me directement g�n�rer un lien avec un HtmlHelper :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    @Html.RouteLink(Url.RouteUrl("Categorie", new { urlFormer = Model.urlFormer}) ?? "Lien introuvable", "Categorie", new { urlFormer = Model.urlFormer })

  14. #14
    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
    Citation Envoy� par Noxen Voir le message
    Quand je parle de segments d'url c'est en gros chaque �l�ment s�par� par un "/". Pour "Mode/Femmes/Robes/RobeMoulante/" tu aurais les segments Mode, Femmes, Robes et RobesMoulantes. Un segment peut �tre compos� de plusieurs param�tres, s�par�s par une constante, par exemple : "Mode/Femmes/Robes/RobeMoulante/bleue-courte-hivers", la dernier segment est compos� des trois param�tres bleue, courte et hivers.

    La wildcard dans les segments d'url pour la route je l'avais vue dans un bouquin, mais j'ai trouv� un article de la msdn qui mentionne cette possibilit� :
    https://msdn.microsoft.com/fr-fr/lib...0de%20segments

    Pour ce qui est du contr�leur et de la m�thode action c'est moi qui me suis tromp�, j'avais oubli� que le nom du contr�leur est suffix� du mot Controller, d'o� : ListOrGridController.ListOrGrid(categorieID).

    Concernant l'id, comme tu utilises un hyperlien tu es oblig� de l'inclure dans l'url si tu veux l'utiliser. Mais comme je disais, tu peux ne pas te baser sur l'id et � la place utiliser les segments de l'url comme codes pour identifier tes cat�gories et les r�cup�rer depuis ta base.

    Avec cette route :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    routes.MapRoute(
      name: "Categorie",
      url: "Categories/{*urlFormer}",
      defaults: new { controller = "ListOrGrid", action = "ListOrGrid", urlFormer = UrlParameter.Optional }
    );
    Si tu charges dans ta vue un mod�le ayant une propri�t� urlFormer, tu peux g�n�rer une url pour ta route avec quelque chose comme �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    @Url.RouteUrl("Categorie", new { urlFormer = Model.urlFormer})
    Tu peux m�me directement g�n�rer un lien avec un HtmlHelper :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    @Html.RouteLink(Url.RouteUrl("Categorie", new { urlFormer = Model.urlFormer}) ?? "Lien introuvable", "Categorie", new { urlFormer = Model.urlFormer })
    Tout ca pour dire exactement la m�me chose que mon pr�c�dent poste...

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

    Informations professionnelles :
    Activit� : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par d�faut
    Citation Envoy� par Dokho1000 Voir le message
    Tout ca pour dire exactement la m�me chose que mon pr�c�dent poste...
    Qui ne dit pas grand chose de plus que ce que j'avais post� 2 ou 3 messages avant. Et que ce pas grand chose consiste essentiellement en des erreurs qui montrent que tu n'as pas lu correctement la question d'origine. Alors je ne crois pas que tu sois bien plac� pour donner des le�ons...

  16. #16
    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
    Citation Envoy� par Noxen Voir le message
    Qui ne dit pas grand chose de plus que ce que j'avais post� 2 ou 3 messages avant. Et que ce pas grand chose consiste essentiellement en des erreurs qui montrent que tu n'as pas lu correctement la question d'origine. Alors je ne crois pas que tu sois bien plac� pour donner des le�ons...
    Je ne donne aucune le�on mais mon poste au moins je ne donne pas des infos inutiles comme mettre le param�tre en optionnel puisque de toute facon il peux y avoir 0 � n paremetre...de plus j'ajoutais le code dans le controller pour montrer la logique.

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

    Informations professionnelles :
    Activit� : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par d�faut
    Ok pour le UrlParameter.Optional.

Discussions similaires

  1. Construire des URL "propres" avec le titre de l'article mais sans ID
    Par speedev dans le forum G�n�ral Conception Web
    R�ponses: 2
    Dernier message: 23/06/2008, 18h24
  2. [XSLT] G�n�rer des fichiers XML avec PHP
    Par oneTime dans le forum Biblioth�ques et frameworks
    R�ponses: 4
    Dernier message: 28/04/2008, 21h27
  3. g�n�rer des furm web avec designer 10g
    Par simocove dans le forum Forms
    R�ponses: 0
    Dernier message: 17/09/2007, 12h35
  4. [XSLT] G�n�rer des fichier SQL avec un XSD
    Par NoiBe dans le forum XSL/XSLT/XPATH
    R�ponses: 3
    Dernier message: 18/01/2007, 10h39
  5. [Excel] G�n�rer des fichiers Excel avec PHP et des donn�es SQL
    Par MaTHieU_ dans le forum Biblioth�ques et frameworks
    R�ponses: 3
    Dernier message: 29/03/2006, 15h46

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