2010-04-20 4 views
0

J'espère que quelqu'un peut me aider. J'ai le contrôle du serveur personnalisé suivant:contrôle Web personnalisé - ParseChildren et ressources Objets

[ParseChildren(true)] 
public class MyControl : WebControl, INamingContainer 
{ 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    public string MyProperty 
    { 
     get;set; 
    } 
} 

Il fonctionne parfaitement avec la majoration suivante:

<acme:MyControl runat="sever"> 
    <MyProperty>Test String</MyProperty> 
</acme:MyControl> 

Mais si je tente de localiser la chaîne de propriété, je reçois une erreur d'analyse:

<acme:MyControl runat="sever"> 
    <MyProperty><%=(string)GetLocalResourceObject("MyResourceKey") %></MyProperty> 
</acme:MyControl> 

Même si je jetai le type, ASP.NET indique que la propriété ne peut pas accepter des contrôles que les enfants. Comment devrait ressembler l'expression si je veux la localiser? Je peux rendre la propriété accessible en tant qu'attribut de la balise du contrôle, mais je préfère la balise ci-dessus, elle semble plus élégante et plus propre.

Merci

Répondre

0

Ajouter une deuxième propriété appelée MyPropertyResourceKey, de sorte que votre code final serait:

[ParseChildren(true)] 
public class MyControl : WebControl, INamingContainer 
{ 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    public string MyProperty 
    { 
     get;set; 
    } 

    string _propertyResourceKey; 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    public string MyPropertyResourceKey 
    { 
     get { 
     return _propertyResourceKey; 
     } 
     set { 
     _propertyResourceKey = value; 

     MyProperty = (string)GetLocalResourceObject(_propertyResourceKey); 
     } 
    } 
} 

EDIT: D'après les commentaires, il semble qu'il y ait aussi une demande pour une plus souple méthode. Généralement, si vous cherchez à attribuer une valeur dynamique à un contrôle, vous devrez soit créer un contrôle de liaison de données (le cas échéant) http://msdn.microsoft.com/en-us/library/ms366540.aspx.

Si, d'autre part, le contrôle de does't savoir comment sa volonté habituellement assignée, la méthode acceptée est d'attribuer la valeur de la propriété dans le code-behind de la page.

+0

Je suppose que cela pourrait fonctionner lorsque la commande utilisera uniquement un objet de ressource dans chaque instance du contrôle, mais si la chaîne pourrait être dérivée d'une autre méthode, pas nécessairement d'un objet ressource? – Raybiez

Questions connexes