Ответ 1
Существует четыре варианта (помимо привязки "<%# %>
" стиля, которые я не рекомендую):
- Задайте значение в коде. Это раздувает ViewState и, конечно, требует изменений кода для каждого экземпляра элемента управления.
- Используйте специальный ExpressionBuilder. Это не раздувает ViewState, но требует изменения всей вашей разметки.
- Используйте адаптер управления, чтобы изменить поведение элемента управления повсюду в вашем приложении; например, путем изменения свойства ImageUrl перед визуализацией элемента управления. Может быть сделано без влияния ViewState.
- Используйте класс, который наследуется от класса ImageButton, в сочетании с сопоставлением тегов, чтобы использовать этот класс вместо оригинала везде в вашем приложении и устранять необходимость внесения изменений в вашу разметку. Может быть сделано без влияния ViewState.
Лучший вариант зависит от ваших требований к приложениям, но я обычно предпочитаю адаптер управления, если вы хотите внести изменения на весь сайт.
Вот пример, если он помогает:
using System;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.Adapters;
namespace Sample
{
public class ImageButtonControlAdapter : WebControlAdapter
{
protected override void BeginRender(HtmlTextWriter writer)
{
ImageButton image = this.Control as ImageButton;
if ((image != null) && !String.IsNullOrEmpty(image.ImageUrl))
{
//
// Decide here which objects you want to change
//
if (!image.ImageUrl.StartsWith("http") &&
!image.ImageUrl.StartsWith("data:"))
{
image.ImageUrl = ResourceManager.GetImageCDN(image.ImageUrl);
}
}
base.BeginRender(writer);
}
}
}
Настройте его в своем приложении со следующей записью в App_Browers/adapter.browser:
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.ImageButton"
adapterType="Sample.ImageButtonControlAdapter" />
</controlAdapters>
</browser>
</browsers>
Ваша разметка будет:
<asp:ImageButton runat="server" OnClick="Agree" ImageUrl="iagree.png" />
Прохладный, правильно?