Подтвердить что ты не робот

Передача данных с страницы ASP.NET на пользовательские элементы управления ASCX загружаются динамически

Я разрабатываю приложение ASP.NET с С# и Ajax.

У меня есть страница, в которой пользовательские элементы управления загружаются динамически. Мне нужно передать некоторые данные (целые значения и некоторые строки) в пользовательский элемент управления, который был загружен динамически.

Теперь я использую Session для передачи этих значений, но я думаю, что могу использовать другой способ; что-то вроде VIEWSTATE или скрытого ввода.

Что вы мне посоветуете?

UPDATE:

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

4b9b3361

Ответ 1

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

public class myControl : Control
{
  ...
  public int myIntValue {get; set;}
  ...
}

В коде позади:

myControl ctrl = new myControl();
ctrl.myIntValue = 5;

Вы также можете сделать это непосредственно в разметке:

<uc1:myControl ID="uc1" runat="server" myIntValue="5" />

Ответ 2

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

public string TestValue { get;set;};

И затем, когда вы разместите свой пользовательский элемент управления на своей странице aspx:

<uc1:UserControl ID="uc1" runat="server" TestValue="Testing" />

Вы также можете изменить значения в вашем коде позади:

uc1.testValue = "some value";

Ответ 3

Чтобы ответить на ваш quesiton, как и все остальные, похоже, вы не хотите, чтобы вы это делали, и я согласен... Я уже делал это раньше.

Первое, что я сделал бы, это сделать вашу страницу реализацией интерфейса.

В элементе управления:

IVansFannelDataProviderPage provider = this.Page as IVansFannelDataProviderPage; if (provider != null) { //grab data from interface } else throw YouCantPutThisControlOnThisKindOfPageException();

Это не самый элегантный способ сделать это, но когда у нас было много элементов управления, которые хотели бы поделиться очень дорогостоящим объектом, это соответствует счету.

Это хорошо работает, но это делает ваш элемент управления непригодным для использования на страницах, которые не реализуют интерфейс, и это делает элементы управления слишком жестко связанными с вашей страницей. Все остальные, говорящие, что страница получает данные от элементов управления, верны; вы устанавливаете элементы управления на странице, а не страницы в элементах управления.

У вас должна быть очень хорошая причина, чтобы сделать это. Для нас: загрузка общего объекта была очень дорогой, и загрузка страницы/сохранение ее независимо от того, какой элемент управления работал над этим объектом, весьма полезен.

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

Если бы мне пришлось повторять это снова, у меня была бы страница отправки данных элементам управления с событиями, возможно, через отражение, если мне нужно было лениться.

Ответ 5

Виды поражений - цель использования ИСО-контроля ascx, поскольку это нарушает инкапсуляцию управления. Ваша страница должна быть -getting-данными из элемента управления через подписку на события, опубликованные элементом управления.

Ответ 6

Вы можете установить значения в коллекции HttpContext.Items и прочитать их в своих элементах управления. Это похоже на сеанс, за исключением того, что он доступен только для каждого запроса не для всего сеанса.

http://www.4guysfromrolla.com/articles/060904-1.aspx

ИМХО это немного лениво, но в некоторых ситуациях это может быть хорошим решением.