Я создал пользовательский элемент управления кнопкой ссылки, чтобы он также мог отображать изображение.Код ниже:
namespace SharepointTools.Controls
{
[ToolboxData("<{0}:CustomImageButton runat=\"server\"></{0}:CustomImageButton>")]
public class CustomImageButton : LinkButton
{
public string ImageUrl { get; set; }
public string ButtonId { get; set; }
/// <summary>
/// This image will override any background mentioned in CSS. Use this in case you want to use ASP.net (non-CSS) style URLs (like ~/images/add.png)
/// </summary>
public string BackgroundImageUrl { get; set; }
public override void RenderBeginTag(HtmlTextWriter writer)
{
if (!string.IsNullOrEmpty(this.ImageUrl))
{
base.Style.Add("background", "url('" + base.ResolveUrl(this.ImageUrl) + "') left center no-repeat");
base.Style.Add("background-size", "32px 32px");
}
base.Style.Add("text-decoration", "none");
base.Style.Add("text-align", "center");
base.RenderBeginTag(writer);
}
protected override void RenderContents(HtmlTextWriter writer)
{
//string spanId = string.IsNullOrEmpty(this.ButtonId) ? string.Empty : "id='" + this.ButtonId;
writer.Write("<span style='vertical-align:top;'>");
//writer.Write("<img border='0' style='margin-top:2px;margin-left:3px' src='" + base.ResolveUrl(this.ImageUrl) + "' />");
base.RenderContents(writer);
writer.Write("</span>");
}
}
}
Ниже приведена разметка asp, которую я сделал для отображения пользовательской ссылки:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div class="lefPanel" id="leftPanel" style="float: left; width: 30%;">
<asp:Panel ID="ListPanel" runat="server">
<asp:ListView ID="ListView1" runat="server" DataSourceID="LinqDS">
<LayoutTemplate>
<div id="accordion">
<asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
</div>
</LayoutTemplate>
<ItemTemplate>
<h3>
<a href="#">
<%# Eval("Key")%></a></h3>
<asp:ListView ID="ListView2" runat="server" DataSource='<%# Eval("Items")%>'>
<LayoutTemplate>
<div>
<asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
</div>
</LayoutTemplate>
<ItemTemplate>
<div id="ElementDiv" class="elem ui-accordion ui-widget ui-helper-reset ui-accordion-header ui-helper-reset ui-state-default ui-state-active"
style="vertical-align: middle">
<spt:CustomImageButton ID="ImageButton1" runat="server" CommandName="SelectItem"
OnCommand="ImageButton1_SelectItem" ImageUrl='<%# new SPFieldUrlValue(Eval("ApplicationType.Icon") as string).Url %>'
CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Application.Id")%>'
Text=' <%# DataBinder.Eval(Container.DataItem, "ApplicationType.ApplicationName") %>' />
</div>
</ItemTemplate>
</asp:ListView>
</ItemTemplate>
</asp:ListView>
</asp:Panel>
</div>
</ContentTemplate>
</asp:UpdatePanel>
Когда моя веб-часть загружается в первый раз, все работает нормально - кнопкиправильно отображаются с соответствующим изображением.Проблема в том, что когда я нажимаю кнопку и UpdatePanel
перезагружается, изображение исчезает.ImageUrl
в CustomImageButton
равно нулю при отладке.Если я использую нативный ImageButton
из ASP, проблема не возникает.Я не знаю, почему это происходит.Текст отображается правильно, и я предполагаю, что это связано с тем, что моя пользовательская кнопка расширяет LinkButton
.