Вы можете реализовать интерфейс в вашем пользовательском контроле для соответствующих параметров.
public interface ICustomParams
{
string UserName { get; set; }
DateTime SelectedDate { get; set; }
}
реализовать интерфейс в пользовательском контроле, как это
public partial class WebUserControl : System.Web.UI.UserControl , ICustomParams
{
public string UserName { get; set; }
public DateTime SelectedDate { get; set; }
}
, затем загрузить свой элемент управления:
UserControl userControl = (UserControl)page.LoadControl(pathToControl);
Доступ к управлению через интерфейс
ICustomParams ucontrol = userControl as ICustomParams;
if(ucontrol!=null)
{
ucontrol.UserName = "henry";
ucontrol.SelectedDate = DateTime.Now;
}
Готово,
Вы можете добавить несколько интерфейсов для нескольких целей.Если в usercontrol не реализован интерфейс, оператор if будет избегать его использования
Но если вы действительно не можете получить доступ к usercontrols и знаете «немного» о свойствах, которые вы хотите установить, и о том, какой они типпопробуйте более динамичный способ с отражением:
загрузить usercontrol:
UserControl userControl = (UserControl)Page.LoadControl(@"~/WebUserControl.ascx");
получить свойства загруженного usercontrol:
PropertyInfo[] info = userControl.GetType().GetProperties();
цикл через него:
foreach (PropertyInfo item in info)
{
if (item.CanWrite)
{
switch (item.Name)
{
case "ClientName"
// A property exists inside the control": //
item.SetValue(userControl, "john", null);
// john is the new value here
break;
}
}
}
Я бы рекомендовал вам это только в том случае, если вы НЕ МОЖЕТЕ получить доступ к пользовательским элементам управления, и существуют десятки из них с большим количеством переменных свойств на один пользовательский элемент управления.(Это может стать очень уродливым, медленным и небезопасным)