Подтвердить что ты не робот

Как создать вращающиеся рекламные блоки в ASP.NET MVC?

Как бы вы реализовали вращающийся рекламный блок с обновлением каждой страницы, аналогично тому, что делает SO, используя ASP.NET MVC?

Считаете ли вы, что у них есть переменная сеанса с тем, какой рекламный индекс мы просматриваем в настоящее время, и циклически обрабатываем его каждый запрос или что-то еще?

4b9b3361

Ответ 1

Я бы использовал OpenX, DART, Менеджер объявлений Google, RightMedia, Rubicon или какой-либо другой менеджер объявлений.

Однако, если бы я хотел сам создать его как упражнение, я бы:

  • Создать таблицу объявлений в базе данных
  • В моем базовом контроллере выберите произвольное объявление в ViewData​​li >
  • Добавьте частичный вид вашей главной страницы для рендеринга объявления.
  • [Самое главное] Используйте версию в стиле MVK от Phil Haack "кэширование пончиков "

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

Ответ 3

Вы можете просто создать случайное число и использовать его в качестве ключа массива для объявления, которое вы хотите отобразить, но вы не сможете обеспечить равномерную экспозицию, и это вызовет много проблем, когда дело доходит до обмена денег. Приложение, которое было создано для этой цели, OpenX. Это обеспечивает действительно глубокую статистику, а также позволяет указать, сколько должно отображаться каждое объявление и т.д. Его очень мощные, многие коммерческие сайты используют его для управления своей рекламой.

Ответ 4

Мне пришлось написать что-то в MVC для взвешенного рекламного элемента, который, если возможно, не показывал одно и то же объявление дважды, и в моей спешке я оказался с ужасным кодом, который мог бы послужить вам источником вдохновения.

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

    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;
    }