none
Bibothèque de contrôle ASP.Net RRS feed

  • Question

  • Bonjour,

    Je cherche une solution pour utiliser un contrôle (fichier ascx) provenant d'une autre application. Mais j'aimerais utiliser ce contrôle sans charger le fichier ascx dans le projet en cours. Je souhaiterais que ce contrôle soit exécuté dans son contexte et non dans le contexte de l'application appelante. C'est pour cette raison que LoadControl m'est inutile. Car il ne fait qu'aller chercher un fichier depuis un chemin virtuel et le charger dans l'application en cours. Le fichier perd donc tous les éléments auxquels il est rattaché (ex: DataSet fortement typé, ressources ect...).

    Ce que j'attends en réalité comme comportement c'est un peut celui que l'on obtiendrait avec une iframe. Sauf que je ne peux pas utiliser d'iframe car je souhaiterais que le rendu final soit directement intégré au projet appelant pour des raison d’esthétique (l'iframe à une taille fixe et ne prend pas en charge le CSS du site appelant).

    Et aussi parce que coté code serveur un dialogue entre l'application appelante et le contrôle appelé doit être possible. Charger ce contrôle (ou une page aspx) par AJAX ne me permettrait pas de communiquer avec la classe du contrôle. Au pire je récupérerais le noms des champs lors du post, mais cela ne servirait à rien car l'application appelante charge dynamiquement l'application appelée. Elle ne connais pas les champs à l'avance et donc ne pourra pas les traiter.

    Merci pour votre aide.

    Cordialement,

    Olivier.


    • Modifié Mayzz jeudi 10 avril 2014 06:59 Ajout de précisions
    jeudi 10 avril 2014 06:44

Réponses

  • Bonjour,

    Malheureusement les UserControl ne sont pas destinés à être partagé d'une application à une autre. Comme vous l'avez constaté, le UserControl ne contient pas toutes les ressources nécessaires à son utilisation (fichiers js, css, ressources, DataSet,...).

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Proposé comme réponse Aurel Bera vendredi 11 avril 2014 12:32
    • Marqué comme réponse Aurel Bera mercredi 16 avril 2014 06:55
    jeudi 10 avril 2014 22:49
    Modérateur

Toutes les réponses

  • Bonjour,

    Malheureusement les UserControl ne sont pas destinés à être partagé d'une application à une autre. Comme vous l'avez constaté, le UserControl ne contient pas toutes les ressources nécessaires à son utilisation (fichiers js, css, ressources, DataSet,...).

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Proposé comme réponse Aurel Bera vendredi 11 avril 2014 12:32
    • Marqué comme réponse Aurel Bera mercredi 16 avril 2014 06:55
    jeudi 10 avril 2014 22:49
    Modérateur
  • Bonjour Gilles,

    Effectivement j'en ai fait le constat.

    En réalité je vais expliquer ce que je tente de faire plutôt que la méthode que j'emploi qui n'est peut être pas la plus adaptée.

    Ce que je cherche à faire c'est à réaliser l'insertion d'une application dans un site web ASP.Net. Comme en WinForm, il est possible de développer des contrôles qui s'exécutent dans leur contexte et qui peuvent être chargés dynamiquement dans un form.

    Je voudrais créer une architecture ou mon site web ASP.Net serait une plateforme et pourrait héberger des sous-applications. Il pourrait charger des page de ces sous-applications au sein de ses propres pages (rendu partiel). 

    Ainsi cela permet d'établir une architecture de base pour mon site ASP.Net, de créer un SDK et de permettre aux développeurs de créer des sous-applications sans avoir à connaitre le code source de la plateforme principale.

    J'aurais aussi pu appeler les pages de mes sous-applications avec une requête HTTP classique et récupérer le flux pour l'inclure dans ma page hôte. Le problème c'est que je ne peux pas imbriquer la page appelée dans ma page actuelle car les formulaires ASP.Net contiennent obligatoirement une balise form. Ce qui fait des formulaires imbriqués et n'est pas valide.

    Pour le moment j'utilise des WebApp comme sous-applications pour créer une bibliothèque de contrôles et comme le rendu (fichier ascx) n'est pas pris en compte je lie celui-ci tant que ressource dans mon assembly et le charge à l'aide de Page.ParseControl. Ça fonctionne car le contexte de l'application est bien l'assembly compilée et non le site ASP.Net. J'ai donc accès aux autres classes de cette assembly (DataSet, Helper ect...) et le site web hôte peu en même temps dialoguer avec l'UserControl.

    Le plus embêtant c'est que la page hôte de mon site qui héberge le rendu appel l'assembly, crée l'instance de contrôle et l'ajoute à mon formulaire, le contrôle n'est pas recréé lors du postback. Car le chargement partiel du rendu s'effectue dans un UpdatePanel. Mais cela ne provient pas du fait que j'utilise un contrôle personnalisé, il en serait de même si j'instanciais un label. 

    • Modifié Mayzz samedi 12 avril 2014 19:09 Orthographe
    samedi 12 avril 2014 10:43
  • Bonjour,

    "Je voudrais créer une architecture ou mon site web ASP.Net serait une plateforme et pourrait héberger des sous-applications. Il pourrait charger des page de ces sous-applications au sein de ses propres pages (rendu partiel). 

    Ainsi cela permet d'établir une architecture de base pour mon site ASP.Net, de créer un SDK et de permettre aux développeurs de créer des sous-applications sans avoir à connaitre le code source de la plateforme principale."

    Ce principe est très simple à mettre en œuvre en utilisant ASP .NET MVC.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    dimanche 13 avril 2014 22:54
    Modérateur