2010-10-12 8 views
0

Je souhaite localiser ma page ASPX.Impossible d'utiliser GetLocalResourceObject dans InstantiateIn

Cela devrait inclure linkbuttons créé dynamiquement dans un GridView intérieur de InstantiateIn

(amendement 1: mise en œuvre de la méthode System.Web.UI.ITemplate.InstantiateIN pour manipuler l'apparence d'un GridView)

(amendement n ° 2: six premières lignes de code ajouté pour mieux indiquer l'emplacement d'un autre code)

Mais à l'intérieur InstantiateIn je ne peux pas utiliser (voir) la méthode GetLocalResourceObject

Solution: utiliser une variable de session

Question: Pourquoi ne puis-je pas utiliser GetLocalResourceObject dans InstantiateIN?

ce qui suit passe à l'intérieur InstantiateIn

public class DynamicTemplateGridViewSearch : ITemplate 
{ 
    public void InstantiateIn(System.Web.UI.Control Container) 
    { 
    switch (ItemType) 
    { 
    case ListItemType.Item: 
    switch (InfoType) 
    { 
     case "Command": 
      { 
       LinkButton search_button = new LinkButton(); 
       search_button.ID = "search"; 
       search_button.CommandName = "Edit"; 
       //following line does not work. Error is: 
       //The name 'GetLocalResourceObject' does not exist in the current context 
       search_button.Text = GetLocalResourceObject("SearchButtonResource1.Text").ToString(); 
       //so I have to create a Session-String in Page_Load 
       //which is referenced here 
       search_button.Text = (string)new Page().Session["SearchText"]; // "Search"; 
       search_button.Click += new EventHandler(search_button_Click); 
       Container.Controls.Add(search_button); 

Répondre

0

Vous ne l'avez pas dit où exactement InstantiateIn méthode se trouve - est à l'intérieur d'un contrôle personnalisé? Quoiqu'il en soit, vous pouvez utiliser la propriété container.Page pour obtenir une référence à l'objet page et invoquer la méthode dessus. Par exemple,

search_button.Text = Container.Page.GetLocalResourceObject("SearchButtonResource1.Text").ToString(); 

BTW, référence d'objet de session peut être obtenue de la même ou vous pouvez utiliser HttpContext en cours. Par exemple, Container.Page.Session["SearchText"] OU HttpContext.Current.Session["SearchText"]

+0

VinaiC, merci pour votre réponse. J'ai essayé votre suggestion, mais GetLocalResourceObject n'apparaît pas dans IntelliSense comme méthode (pour une raison quelconque, il n'y a aucune visibilité de cet endroit). Pour une meilleure compréhension, j'ai ajouté six lignes de code principales. Il est lié à l'implémentation de la méthode System.Web.UI.ITemplate.InstantiateIN pour manipuler l'apparence d'un GridView. Nous ajoutons par programme un LinkButton (et plein d'autres choses) et nous aimerions localiser tous ces textes. – Henry99

+0

@ Henry99, pouvez-vous voir la propriété Page pour Container dans IntelliSense? Quoi qu'il en soit, Container est un contrôle et il aura la propriété Page pour obtenir l'objet page et Page a la méthode GetLocalResourceObject. Vous devriez essayer de compiler ce code et vérifier si vous avez des erreurs. – VinayC

+0

@VianyC, merci beaucoup pour votre temps passé! (ma réponse est divisée en plusieurs commentaires) J'écris .NET Business-Applications et ne suis pas le gourou du code concernant la compréhension des contrôles serveur ASP.NET. J'utilise le codage standard pour faire apparaître des contrôles à l'intérieur d'un GridView ASP.NET. Par exemple un LinkButton dont l'attribut de texte est "Search" qui devrait être localisé. Pour cela, je crée une classe DynamicTemplateGridView: ITemplate (voir code ci-dessus) À l'origine j'ai essayé ce qui suit pour localiser les chaînes (à l'intérieur de la méthode InstantiateIN de DynamicTemplateGridView) – Henry99