不能在InstantiateIn中使用GetLocalResourceObject

时间:2010-10-12 03:13:37

标签: asp.net instantiation

我想本地化我的aspx页面。

这应包括在InstantiateIN

内的GridView中动态创建的LinkBut​​tons

(修订1:实现System.Web.UI.ITemplate.InstantiateIN方法来操纵GridView的外观)

(修订2:添加前六行代码以更好地指示其他代码的位置)

但是在InstantiateIN中我不能使用(请参阅)方法GetLocalResourceObject

解决方案:使用会话变量

问题:为什么我不能在InstantiateIN中使用GetLocalResourceObject?

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);

1 个答案:

答案 0 :(得分:0)

您还没有告诉确切InstantiateIn方法的位置 - 是否在自定义控件中?

无论如何,您可以使用container.Page属性来获取对页面对象的引用并在其上调用方法。例如,

search_button.Text = Container.Page.GetLocalResourceObject("SearchButtonResource1.Text").ToString();
BTW,可以类似地获得会话对象引用,也可以使用当前的HttpContext。例如,Container.Page.Session["SearchText"]HttpContext.Current.Session["SearchText"]