2009-08-30 15 views
1

私は、System.Web.UI.WebControls.AdRotatorの3つのインスタンスを使用するマスターページを作成しました。これらのインスタンスのそれぞれは、同じXML要素のXMLファイルに基づいています。例えば、Asp.NET - AdRotatorの複数のインスタンス

<asp:adRotator AdvertisementFile="/ads.xml" Runat="server"/> 

*** ads.xml *** 
<Advertisements> 
    <Ad> 
     <ImageUrl>/Path/Banner.gif</ImageUrl> 
     <NavigateUrl>http://www.google.com</NavigateUrl> 
     <AlternateText> 
     The best search engine in the world! 
     </AlternateText> 
     <Impressions>3</Impressions> 
    </Ad> 
</Advertisements> 

問題は、同じ広告が所定の瞬間にAdRotatorsの2以上に現れる機会にあります。

いつでも広告を表示するにはどうすればよいですか? 1つの可能性は、広告を3つの異なるXMLファイルに分け、各AdRotatorに異なるファイルを割り当てることです。しかし、これにより、常に同じ場所にある広告が表示され、ページ上の「プレミアム」の場所になることがあります。

答えて

0

AdRotatorは、バナーのシリーズを表示するように設計されていなかったので、あなたは、Webフォーム上で複数のAdRotatorコントロールを配置し、同じAdvertisementFileにそれらを指している場合、あなたは重複を防ぐことはできません。

AdRotatorだけ最も基本的な広告機能を提供するために設計されています。それは間違いなく "本当の"広告配信システムと競争したり、それを置き換えることを意図していません。より精巧なものが必要な場合は、サードパーティ製のシステムを調べるか、独自のシステムを起動する必要があります。

0

固有の制限のために自分のAdRotatorを公開するという2番目のRex Mの推奨ですが、回転子のAdCreatedEventでこれを行う方法があります。 3つ以上の回転子については、http://tinyurl.com/7rymectで概説されている概念を試してください(答えを見るには、ページの下にスクロールする必要があります)。それ以外の場合は、ページにある2つのAdRotatorsでこれらの行に沿って試してみることができます。

/// <summary> 
/// First ad rotator control 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
protected void AdRotator_AdCreated(object sender, AdCreatedEventArgs e) 
{ 
    //Get displayed ad's id 
    int currentAd = (int)e.AdProperties["AdId"]; 

    //Remove that ad from the list 
    TList<Banner> ads = GetBannerThatIsNotThisAdId(currentAd, AdRotator.KeywordFilter); 

    //Do we have an ad to display? 
    if (ads.Count > 0) 
    { 
     AdRotator1.DataSource = ads; 
     AdRotator1.DataBind(); 
    } 
    else //nope, so hide 2nd control 
    { 
     AdRotator1.Visible = false; 
    } 
} 

public static TList<Banner> GetBannerThatIsNotThisAdId(int adId, string pCategory) 
{ 
    BannerService bannerService = new BannerService(); 
    TList<Banner> banners = bannerService.GetAll(); 
    Banner banner = bannerService.GetByAdId(adId); 

    banners.ApplyFilter(delegate(Banner b) { return b.Keyword.Equals(pCategory) && (b.IsActive.Equals(true)); }); 

    banners.Remove(banner); 

    return banners; 
} 
関連する問題