2009-11-09 4 views
0

J'ai une page de formulaire Web appelée Search.aspx. J'ai besoin de rendre le formulaire dans d'autres endroits, donc je voudrais convertir le formulaire Web en un contrôle utilisateur, mais mon Search.aspx.cs hérite d'une classe Page personnalisée qui hérite de System.Web.UI.Page. Comme I C# ne prend pas en charge l'héritage multiple, je ne peux pas hériter à la fois de ma classe de page personnalisée et de la classe System.Web.UI.UserControl dans ma classe de classes User Control Search (Search.ascx.cs).Conversion de formulaire Web ASP en contrôle utilisateur

Je me demandais s'il y avait un moyen de contourner cela sans avoir à créer une deuxième classe de page personnalisée pour le UserControl.

Merci d'avance.

Répondre

1

De quoi le formulaire de recherche a-t-il besoin à partir de la classe de page personnalisée héritée? Vous pouvez concevoir votre formulaire de recherche afin qu'il ne soit rien d'autre qu'une forme d'entrées et de propriétés publiques qui exposent les valeurs d'entrée. Il est difficile de dire quelle est la meilleure réponse sans plus d'informations sur la valeur fournie par la classe Page personnalisée. Généralement, les contrôles n'auront pas besoin d'en savoir beaucoup sur leur page parente.

1

Dépend du reste de l'architecture.

L'itinéraire le plus simple consiste à modifier votre héritage à UserControl. Si vous ne disposez pas de certaines méthodes dans votre classe de base de page personnalisée, vous pouvez les dupliquer dans votre classe de base personnalisée UserControl.

Si vous essayez de le conserver au sec, refactorisez ces méthodes personnalisées dans une classe qui fournit ces méthodes à toute classe Page ou UserControl. Vous utiliseriez la composition plutôt que l'héritage, ce qui peut être une meilleure voie à suivre si votre arbre d'héritage devient profond.

Une autre option consiste à extraire une interface de votre classe de pages personnalisée. Je ne pense pas que ce serait une bonne idée. D'abord, vous n'avez probablement pas besoin de traiter vos Pages et vos UserControls exactement de la même façon (polymorphisme). Deuxièmement, vous devrez toujours implémenter l'interface dans les deux classes personnalisées, de sorte que vous finissez par rompre DRY de toute façon.

Questions connexes