2009-02-19 4 views
20

Wie würden Sie mit jeder Seitenaktualisierung einen rotierenden Anzeigenblock implementieren, ähnlich wie bei der Verwendung von ASP.NET MVC?Wie erstelle ich rotierende Anzeigenblöcke in ASP.NET MVC?

Glauben Sie, dass sie eine Sitzungsvariable mit dem Anzeigenindex haben, den wir gerade ansehen, und wiederholen Sie jede Anfrage oder etwas anderes?

+0

ich nichts falsch mit der Frage sehen. –

+0

@ [KingNestor]: Die Umformulierung ist ausgezeichnet, danke. jetzt ist es eine allgemeine Frage. Ihre Burg ist jetzt aus Stein statt aus Sand. –

+2

Nichts ist verkehrt mit Sandburgen, außer den Punk-Kids, die herumlaufen und sie niedermachen, um den Tag anderer zu ruinieren. – ceejayoz

Antwort

16

würde ich OpenX, DART, Google Ad Manager, RightMedia, Rubicon oder einen anderen Anzeige-Manager verwenden.

Allerdings, wenn ich es selbst als eine Übung bauen wollte, würde ich:

  1. Erstellen Sie eine Datenbank-Tabelle von Anzeigen
  2. In meiner Basis-Controller, wählen Sie eine zufällige Anzeige in die Viewdata
  3. Fügen Sie eine Teilansicht auf Masterseite der Anzeige
  4. [Am wichtigsten ist] Verwenden Phil Haack MVC-style-Version von „donut caching
zu machen

Dies ist derselbe Ansatz, mit dem Sie ein zyklisches Zitat, einen zufällig ausgewählten Benutzer oder einen beliebigen anderen zufälligen Inhalt anzeigen möchten, der auf jeder Seite angezeigt werden soll.

1

Sie könnten einfach eine Zufallszahl generieren und sie als Array-Schlüssel für die Anzeige verwenden, die Sie anzeigen möchten, aber Sie wären nicht in der Lage, eine gleichmäßige Belichtung sicherzustellen, und es würde viele Probleme beim Geldaustausch verursachen . Eine App, die für diesen Zweck erstellt wurde, ist OpenX. Dies bietet wirklich detaillierte Statistiken und es ermöglicht Ihnen auch festzulegen, wie viel jede Anzeige angezeigt werden muss. Es ist sehr mächtig, viele kommerzielle Websites verwenden es, um ihre Werbung zu verwalten.

+0

Wenn Sie Stackoverflow mehrmals aktualisieren, sehen Sie, dass sie bei jeder Aktualisierung in der gleichen Reihenfolge durchlaufen. – KingNestor

+0

+1 - Ich mag die Idee von OpenX, aber ich wäre interessiert zu sehen, ob es eine. NET-Version von etwas Ähnliches gibt :-) – WestDiscGolf

+0

OpenX ist großartig, weil es alles für Sie verwaltet! Keine zusätzliche Last auf Ihrem Server, wirklich starke Statistiken, können Sie verwalten, wie viel jede Anzeige angezeigt wird und wann ect. Sie installieren es nicht auf Ihrem Server, sie hosten alles. – Sam152

0

Ich musste etwas in MVC für eine gewichtete Anzeigensteuerung schreiben, die nicht die gleiche Anzeige zweimal hintereinander zeigte, und in meiner Eile endete ich mit einem schrecklichen Code, der als Inspiration für Sie dienen könnte .

Ich bin sicher, es gibt viele bessere Möglichkeiten, dies zu tun (und ich kenne bereits Fälle, in denen das Duplikate durchlässt, wenn es nicht sollte), aber für die kurze Zeit, die ich darauf verbrachte, hat es den Job gemacht.

public List<Ad> GetRandomWeightedAds() 
    { 
     /* Generate random order list of ads with duplicates for ViewsPerRotation */ 
     List<Ad> returnList = GetAllAds().SelectMany(s => Enumerable.Repeat(s, s.ViewsPerRotation)).OrderBy(s => Guid.NewGuid()).ToList(); 
     for (int i = 0; i < returnList.Count - 1; i++) /* Compare all but the last element against subsequent element */ 
     { 
      if (returnList[i].Id == returnList[i + 1].Id) 
      { 
       /* If next to an identical element try and find a new spot for the subsequent element */ 
       for (int j = 0; j < returnList.Count; j++) 
       { 
        if (returnList[j].Id != returnList[i].Id /* Don't switch identical element back into same pos*/ 
         && (j<i || j == 0 || j-1 == i || returnList[i].Id != returnList[j - 1].Id) /* When moving before current 'i', don't move into a place after an identical element */ 
         && (j<i || j == returnList.Count - 1 || j + 1 == i || returnList[i].Id != returnList[j + 1].Id)) /* When moving before current 'i', don't move into a place before an identical element */ 
        { 
         returnList[i] = returnList[j]; 
         returnList[j] = returnList[i+1]; /* returnList[i+1] == returnList[i] */ 
         break; 
        } 
       } 
      } 
     } 
     return returnList; 
    } 
+0

Gerade bemerkt, dass Sie jedes Mal den gleichen Zyklus wollen. Sie sollten das Verhalten in Ihrem Beitrag klären. Ich werde sehen, ob ich Code habe, den ich posten kann. –

+0

Ich würde nur Portmans Antwort folgen [http://stackoverflow.com/questions/563706/how-do-i-create-roating-ad-blocks-in-asp-net-mvc-like-stackoverflow-does/586052 # 586052] und verwenden Sie Cookies oder Sitzungsvariablen wie für die Positionserhaltung vorgeschlagen. –

Verwandte Themen