Изменить шаблон UserControl во время выполнения - PullRequest
1 голос
/ 30 августа 2010

Можно ли изменить ascx-файл, используемый usercontrol во время выполнения?

Например, на моей странице у меня есть

<ctl:SampleControl runat="server" />

в web.config У меня есть

<controls>
<add tagPrefix="ctl" tagName="SampleControl" src="~/UserControls/SampleControl.ascx" />
</controls>

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

1 Ответ

0 голосов
/ 30 августа 2010

Вероятно, лучше всего здесь не кодировать имя файла «default» .ascx в вашем файле web.config.Это сделает вашу жизнь сложнее.Всегда выполняйте это определение во время выполнения, например, вот так:

В вашем файле .aspx:

<asp:PlaceHolder runat="server" ID="samplePH" />

В коде:

string file = "~/UserControls/SampleControl.ascx";
if (condition)
    file = "~/UserControls/OtherControl.ascx";
UserControl uc = (UserControl)LoadControl(file);  // from System.Web.UI.TemplateControl.
samplePH.Controls.Clear();
samplePH.Controls.Add(uc);

Но,имейте в виду, что для правильной работы постбэков вам необходимо создать тот же элемент управления, который был загружен при последнем запросе, в начале жизненного цикла страницы - обычно на этапе инициализации.Это гарантирует, что viewstate будет правильно проанализирован.Затем, далее на этапах жизненного цикла обработчика событий, PreRender и т. Д., Вы можете использовать приведенный выше код для загрузки UserControl для текущего запроса.

Если вам действительно нужно кодировать настройки страницы по умолчанию вфайл конфигурации (для случаев, когда конечные пользователи могут захотеть изменить его), рассмотрите возможность сделать это в app.config, а не скрывать его в разделе <controls> файла web.config.

Документация для метода TemplateControl.LoadControl(string): http://msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.loadcontrol.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...