Кнопка и индикаторы карты под ней - всего лишь одно изображение: https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif
Единственное, что нужно Вы можете обрезать изображение, чтобы удалить пустое пространство вокруг него и изменить его размер в соответствии с вашим дизайном.
Я рекомендовал бы использовать управление заполнителем, переместив Вашу разметку в управление отдельного пользователя, затем загрузив это во времени выполнения и добавив его к соответствующему заполнителю.
Например.
// 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);
Это постарается не загромождать Вашу страницу с ненужной разметкой, и загрузиться она во времени выполнения также избежит ненужного беспорядка позже, когда другой разработчик посмотрит на код и не может сразу видеть, почему управление находится в одном месте в разметке, но представляет на совершенно другой части страницы.
Веб-Части делают то, что Вы хотите сделать?
Или, можно изменить родителя программно средств управления для перемещения их в отдельную область.
Можно переопределить Метод рендеринга и поместить средства управления везде, где Вы хотите в 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();
}
Альтернатива (и один я видел делавшийся много раз прежде), через 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>
Вы могли всегда помещать панели в предопределенные местоположения и добавлять управление к определенной панели во времени выполнения.. Вот пример, добавляющий маркировку (маркировка могла быть заменена любым управлением).
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/