Ретранслятор ASP.NET не выводит HTML ожидаемо - PullRequest
0 голосов
/ 18 октября 2018

У меня есть ретранслятор, в котором я хочу показывать рекламу.Моя проблема заключалась в том, содержал ли ретранслятор URL-адрес, если он оборачивал изображение в гиперссылку, а не просто отображал изображение.Для этого я использовал OnItemDataBound.

HTML

<div class="col-12 text-center">
    <!-- Advert column -->
    <asp:Panel ID="pnl_Adverts" runat="server">
        <asp:Repeater ID="rpt_Adverts" runat="server" OnItemDataBound="rpt_Adverts_ItemDataBound">
            <ItemTemplate>
                <div class="row advert_row">
                    <asp:Panel ID="pnlAds" runat="server">
                    </asp:Panel>
                </div>
            </ItemTemplate>
        </asp:Repeater>
    </asp:Panel>
</div>

В ItemDataBound я догадался, что это лучший способ проверить, существует ли URL-адрес, и показать гиперссылку.Я пытался скрыть гиперссылку, используя Javascript, но она также скрывала изображение.

ItemDataBound

protected void rpt_Adverts_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    //Get this data item as a datarow
    DataRowView drv = e.Item.DataItem as DataRowView;

    //Get the url
    string url = drv.Row["url"].ToString();

    //Check if there is an url
    if (url.Length > 0)
    {
        //Create a hyperlink with an image
        HyperLink hlAdvert = new HyperLink()
        {
            ImageUrl = Resources.Main.Url + "/images/ads/" + drv.Row["img"],
            NavigateUrl = drv.Row["url"].ToString(),
            Target = "_blank",
            ToolTip = "Visit",
        };

        //Add nofollow attribute to this hyperlink
        hlAdvert.Attributes.Add("rel", "nofollow");

        //Add this image link to the advert panel
        pnl_Adverts.Controls.Add(hlAdvert);
    }
    else
    {
        //Create an image
        Image imgAd = new Image()
        {
            ImageUrl = Resources.Main.Url + "/images/ads/" + drv.Row["img"],
            AlternateText = "Advert"
        };

        //Add the image to the advert panel
        pnl_Adverts.Controls.Add(imgAd);
    }
}

Это то, как оно выводилось, я не уверен, почему, но он не добавилгиперссылки на панель, хотя я специально добавил элемент управления гиперссылкой на панель ASP.

<div class="col-12 text-center">
    <!-- Advert column -->
    <div id="pnl_Adverts">

        <div class="row advert_row">
            <div id="rpt_Adverts_pnlAds_0">
            </div>
        </div>

        <div class="row advert_row">
            <div id="rpt_Adverts_pnlAds_1">
            </div>
        </div>

        <a title="Visit" rel="nofollow" href="/advertising" target="_blank">
            <img title="Visit" src="/images/ads/advertise_here.png" alt="" /></a><a title="Visit" rel="nofollow" href="/advertising" target="_blank"><img title="Visit" src="/images/ads/advertise_here.png" alt="" /></a>
    </div>
</div>

Это то, что я ожидаю.

<div class="col-12 text-center">
    <!-- Advert column -->
    <div id="pnl_Adverts">
        <div class="row advert_row">
            <div id="rpt_Adverts_pnlAds_0">
                <a title="Visit" rel="nofollow" href="/advertising" target="_blank">
                    <img title="Visit" src="/images/ads/advertise_here.png" alt="" /></a>
            </div>
        </div>
        <div class="row advert_row">
            <div id="rpt_Adverts_pnlAds_1">
                <a title="Visit" rel="nofollow" href="/advertising" target="_blank">
                    <img title="Visit" src="/images/ads/advertise_here.png" alt="" /></a>
            </div>
        </div>
    </div>
</div>

1 Ответ

0 голосов
/ 18 октября 2018

Похоже, вы указали неправильный Panel, чтобы добавить свои гиперссылки.Вам нужна панель pnlAds.Поэтому используйте FindControl в событии ItemDataBound и используйте правильный.

protected void rpt_Adverts_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Panel pnl = e.Item.FindControl("pnlAds") as Panel;

    if (url.Length > 0)
    {
        pnl.Controls.Add(hlAdvert);
    }
    else
    {
        pnl.Controls.Add(imgAd);
    }
}
...