【问题标题】:Sharepoint 2010 - image dissapearing after updatePanel reload in custom link controlSharepoint 2010 - 在自定义链接控件中重新加载 updatePanel 后图像消失
【发布时间】: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


【解决方案1】:

解决方案很简单——我只需要将图像 URL 放入 ViewState:

public string ImageUrl 
{
   get { return (string)ViewState["ImageUrl "]; }
   set { ViewState["ImageUrl "] = value; }
}

【讨论】:

    猜你喜欢
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2021-06-17
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多