Как можно переместить средства управления ASP.NET в различные места на Веб-форме во времени выполнения?

Кнопка и индикаторы карты под ней - всего лишь одно изображение: https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif

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

5
задан Deane 3 April 2009 в 14:04
поделиться

5 ответов

Я рекомендовал бы использовать управление заполнителем, переместив Вашу разметку в управление отдельного пользователя, затем загрузив это во времени выполнения и добавив его к соответствующему заполнителю.

Например.

// Load a user control
MyControl userCtrl = (MyControl) LoadControl("~/Controls/MyControl.ascx");

// Or create an instance of your control
SubclassedControl subclassedCtrl = new SubclassedControl();

// Do stuff with controls here
userCtrl.LoadData();
subclassedCtrl.Text = "Hello World";

// Check which placeholder to add controls to
PlaceHolder placeHolder = (foo=="bar") ? placeHolder1 : placeHolder2;

// Add the controls
placeHolder.Controls.Add(userCtrl);
placeHolder.Controls.Add(subclassedCtrl);

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

5
ответ дан 13 December 2019 в 19:36
поделиться

Веб-Части делают то, что Вы хотите сделать?

Или, можно изменить родителя программно средств управления для перемещения их в отдельную область.

2
ответ дан 13 December 2019 в 19:36
поделиться

Можно переопределить Метод рендеринга и поместить средства управления везде, где Вы хотите в HTML.

Только необходимо добавить средства управления к набору Средств управления, который должен взаимодействовать на сервере. Остальная часть Вашего HTML может просто быть записана в ответный поток. При переопределении Рендеринга, можно создать HTML так или иначе, Вы считаете целесообразным, помещая средства управления в любой порядок.

Ниже пример того, как выписать Ваш HTML.

protected override void Render(HtmlTextWriter writer)
{
  AddAttributesToRender(writer);
  writer.RenderBeginTag(TagKey);

  writer.RenderBeginTag(HtmlTextWriterTag.Div);
  _control.RenderControl(writer);
  writer.RenderEndTag();

  writer.RenderEndTag();
}
1
ответ дан 13 December 2019 в 19:36
поделиться

Альтернатива (и один я видел делавшийся много раз прежде), через JavaScript и DOM. Представьте свое управление в скрытом теге Div. Таким образом, Вы представили бы свое содержание здесь:

<div id='rendercontent' style='display:none'>
  .. control here ..
</div>

Затем позволяет, говорят, что Вы хотели переместить все это сюда (тег span внутри, потому что это - то, что мы собираемся заменить):

<div id='newlocation1'><span></span></div>

Вы определили бы следующий JavaScript:

<script language="JavaScript">
function replaceNode(newElementID, targetElementID)
{
    var targetElement=document.getElementById(targetElementID);
    var newElement=document.getElementById(newElementID);
    targetElement.replaceChild(newElement, targetElement.firstChild);
}
</script>

И когда Вы хотите переместить содержание в новое местоположение, звоните:

<script language="JavaScript">
replaceNode('rendercontent','newlocation1');
</script>
3
ответ дан 13 December 2019 в 19:36
поделиться

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

Dim lblDisplay As Label = New Label()
lblDisplay.ID = "myLabel"
lblDisplay.Text = "Some Text"
pnlDisplay.Controls.Add(lblDisplay)

До...

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

Я думаю, что Вы оказываетесь перед необходимостью делать большую часть своей работы в коде позади.

PS.. хороший пример целой установки usercontrol может быть загружен здесь.. http://www.asp.net/downloads/starter-kits/time-tracker/

0
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: