Sharepoint 2010 - изображение исчезает после перезагрузки updatePanel в пользовательском элементе управления ссылками - PullRequest
0 голосов
/ 11 октября 2011

Я создал пользовательский элемент управления кнопкой ссылки, чтобы он также мог отображать изображение.Код ниже:

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.

1 Ответ

0 голосов
/ 12 октября 2011

Решение довольно простое - мне просто нужно было поместить URL-адрес изображения во ViewState:

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