2010-06-18 5 views
3

J'ai créé un contrôle de menu dans asp.net et l'ai mis en page maître. Ce contrôle de menu possède la propriété ActiveItem qui, lorsqu'elle est modifiée, fait apparaître l'un ou l'autre élément du menu comme actif.Puis-je créer des directives personnalisées dans ASP.NET?

Pour contrôler l'élément actif de la page enfant, j'ai créé un contrôle qui modifie la propriété de la page maître appliquée par l'interface IMenuContainer pour mettre à jour l'élément actif du contrôle de menu dans la page maître.

public class MenuActiveItem : Control 
{ 
    public ActiveItemEnum ActiveItem 
    { 
     get 
     { 
      var masterPage = Page.Master as IMenuContainer; 
      if (masterPage == null) 
       return ActiveItemEnum.None; 

      return masterPage.ActiveItem; 
     } 

     set 
     { 
      var masterPage = Page.Master as IMenuContainer; 
      if (masterPage == null) 
       return; 

      masterPage.ActiveItem = value; 
     } 
    } 
} 

Tout fonctionne parfaitement et j'apprécie vraiment cette solution, mais je pensais que, si je savais, je l'aurais créé une directive personnalisée avec la même fonction au lieu de contrôle personnalisé, car il est tout simplement plus de sens de cette façon .

Est-ce que quelqu'un sait comment le faire?

Répondre

2

Vous devriez être capable de transformer cela en une propriété personnalisée de votre page, que vous pouvez définir dans la directive Page.

Créer une classe de base pour votre page, puis modifier vos directives Page comme ceci:

<%@ Page Language="C#" MasterPageFile="~/App.master" 
CodeFileBaseClass="BasePage" ActiveItem="myActiveItem" AutoEventWireup="true" 
CodeFile="Page1.aspx.cs" Inherits="Page1" %> 

Vous devrez peut-être changer la propriété d'être une chaîne, et faire une conversion à l'ENUM. Mais sinon votre code peut rester le même, et il n'a pas besoin d'être dans un contrôle.

Questions connexes