【发布时间】:2011-12-05 05:24:33
【问题描述】:
我创建了一个自定义链接按钮控件,因此它也可以显示图像。代码如下:
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>
当我的 Web 部件第一次加载时,一切正常 - 按钮使用相应的图像正确呈现。问题是,当我单击按钮并重新加载 UpdatePanel 时,图像消失了。调试时CustomImageButton 中的ImageUrl 为null。如果我使用来自 ASP 的本机 ImageButton,则不会出现问题。我不知道为什么会这样。文本正确呈现,我认为这与我的自定义按钮扩展 LinkButton 的事实有关。
【问题讨论】:
-
看懂了你贴出来的解决方法,但是相信问题还是不明白。首先 page_load 你在哪里填充 Image_URL?
标签: asp.net sharepoint-2010 web-parts