Как загрузить веб-пользовательский контроль динамически? - PullRequest
0 голосов
/ 09 февраля 2012

Это действительно важный вопрос.это сводит меня с ума за 4 часа :( я могу загрузить UCAddX.ascx, но если я нажимаю кнопку «Поиск в X», не загружаю пользовательский элемент управления UCSearchX. Есть 3 кнопки, также есть 3 элемента управления веб-пользователя.пользовательские элементы управления после clickEvents. Но метод ниже не работает. Как динамически загружать пользовательский веб-элемент управления? Click By Click (Like Tab control)

 public partial class MyPage: System.Web.UI.Page
    {
   protected void Page_Load(object sender, EventArgs e)
        {
            ViewState["controlType"] = "AddX";
            if (!IsPostBack)
            {
                AddUserControl();
            }
            else
            {
                AddUserControl();
            }
        }

        protected void btnAddX_Click(object sender, DirectEventArgs e)
        {
            ViewState["controlType"] = "AddX";
            if (!IsPostBack)
                  AddUserControl();
            else
                AddUserControl();
        }

        protected void btnSearchX_Click(object sender, DirectEventArgs e)
        {
            ViewState["controlType"] = "SearchX";
            if (!IsPostBack)
                AddUserControl();
            else
                AddUserControl();

        }
        protected void btnUpdateX_Click(object sender, DirectEventArgs e)
        {

        }

        void AddUserControl()
        {
          //  plhContent1.Controls.Clear();
            if (ViewState["controlType"] != null)
            {
                if (ViewState["controlType"].ToString() == "AddX")
                {
                    UCAddX uc = (UCAddX)Page.LoadControl("~/Pages/EN/MyUserControls/UCAddX.ascx");
                    uc.ID = "ucAddX";
                    uc.Attributes.Add("runat", "Server");
                    uc.EnableViewState = true;
                    uc.Visible = true;
                    plhContent1.Controls.Add(uc);
                }
                else if (ViewState["controlType"].ToString() == "SearchX")
                {
                    UCSearchX uc = (UCSearchX)Page.LoadControl("~/Pages/EN/MyUserControls/UCSearchX.ascx");
                    uc.ID = "ucSearchX";
                    uc.Attributes.Add("runat", "Server");
                    uc.EnableViewState = true;
                    uc.Visible = true;
                    plhContent1.Controls.Add(uc);
                }


            }
        }

    }

Ответы [ 3 ]

1 голос
/ 09 февраля 2012

Используйте код ниже для динамической загрузки usercontrol

var control = LoadControl(filePath) as ControlType;

тогда вы можете подписаться на события и добавить в контроль заполнитель.

Надеюсь, это поможет

0 голосов
/ 09 февраля 2012

Пользовательские элементы управления при динамической загрузке должны быть загружены на каждом Page_Load, чтобы их состояние просмотра сохранялось. Так что вам нужно что-то вроде:

    public string CurrentControlToLoad
    {
        get
        {
             if(ViewState["controlType"] == null)
                 return "";
             return (string)ViewState["controlType"];
        }
        set
        {
             ViewState["controlType"] = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if(CurrentControlToLoad != "")
           LoadControl(CurrentControlToLoad);
    }

    protected void btnAddSector_Click(object sender, DirectEventArgs e)
    {
        CurrentControlToLoad = "AddSector";
        LoadControl(CurrentControlToLoad);
    }
0 голосов
/ 09 февраля 2012

попробуйте что-то вроде этого,

//to load the control
     protected void Page_Init(object sender, EventArgs e)
     {
         ViewState["controlType"] = "AddSector";
         //you don't need to check the if condiontion, cause you load every time the controls
         AddUserControl();
      }

когда вам нужно получить значения из элемента управления после обратной передачи, вы должны получить его на

protected void Page_PreRender(object sender, EventsArgs args) {
    //your placeholder that contains data
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...