MVC Razor - регистрировать внешний URL-адрес клика в базе данных при открытии нового URL в новой вкладке - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть представление, которое показывает изображение и имя спортивной команды с href, чтобы при нажатии на нее открыть официальную веб-страницу команды в новой вкладке. Я хочу регистрировать идентификатор команды в своей таблице статистики (StatsMovements) каждый раз, когда на нее нажимают, чтобы я мог отслеживать, какие ссылки используются чаще всего. Я пытаюсь отправить идентификатор команды в действие поста в контроллере, когда на него нажимают с помощью функции JavaScript, которую я нашел в Интернете.

Ожидаемый результат: я хочу, чтобы пользователь щелкнул изображение выбранного команда, откройте новую вкладку с внешней ссылкой href, а также вставьте детали в мою таблицу базы данных SQL Server в фоновом режиме.

Текущий результат: я могу открыть новую вкладку, когда я не не вызывать просмотр поста, но когда я это делаю, кажется, что браузеры блокируют новую вкладку, потому что она видится как всплывающее окно, как только мое действие изменяется. На мобильных устройствах это делает паузу и позволяет пользователям «всегда разрешать всплывающие окна» с моего сайта, но не только они должны это принимать, но и в не мобильных браузерах сообщение «заблокировано всплывающих окон» отображается только в строке поиска браузера в течение доли секунды и затем исчезает. Если я удаляю вызов после действия с помощью функции JavaScript, новая вкладка нормально открывается без проблем, но ничего не записывается в базу данных.

My GET Controller Action;

    public ActionResult TeamForm(long? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Team team = db.Teams.Find(id);
        if (team == null)
        {
            return HttpNotFound();
        }
        var tId = id;
        var results = new List<TeamFormViewModel>();
        var teamData = from t in db.Teams
                       join c in db.Crests on t.Id equals c.TeamId
                       join w in db.Websites on t.Id equals w.TeamId
                       where t.Id == tId
                       select new { TeamId = t.Id, TeamName = t.Team1, TeamCrest = c.Crest1, TeamWebsite = w.Website1 };
        var teamList = from r in teamData select r;
        teamList.ToList().ForEach(x =>
        {
            var model = new TeamFormViewModel() { TeamId = x.TeamId, TeamName = x.TeamName, TeamCrest = x.TeamCrest, TeamWebsite = x.TeamWebsite };
            results.Add(model);
        });
        return View(results);
    }

My POST Действие контроллера;

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult TeamForm([Bind(Include = "Id")] Team team)
    {
        var UserID = GetUID();
        var getDate = DateTime.Now;
        var id = team.Id;
        var websiteURL = (from w in pe.Websites
                          where w.TeamId == id
                          select new { Website = w.Website1 }).FirstOrDefault().ToString();
        string url = Convert.ToString(websiteURL);

        if (ModelState.IsValid)
        {

            var viewId = (from v in pe.StatsViews
                          where v.View == "ClubWebsiteVisit"
                          select v.Id).FirstOrDefault();

            StatsMovement row = new StatsMovement { ViewId = viewId, UserId = UserID, CreatedDate = getDate, WebsiteTeamId = id };
            pe.StatsMovements.Add(row);
            pe.SaveChanges();

            var tId = id;
            var results = new List<TeamFormViewModel>();
            var teamData = from t in db.Teams
                           join c in db.Crests on t.Id equals c.TeamId
                           join w in db.Websites on t.Id equals w.TeamId
                           where t.Id == tId
                           select new { TeamId = t.Id, TeamName = t.Team1, TeamCrest = c.Crest1, TeamWebsite = w.Website1 };
            var teamList = from r in teamData select r;
            teamList.ToList().ForEach(x =>
            {
                var model = new TeamFormViewModel() { TeamId = x.TeamId, TeamName = x.TeamName, TeamCrest = x.TeamCrest, TeamWebsite = x.TeamWebsite };
                results.Add(model);
            });
            return View(results);
        }
        return Redirect("TeamForm", new {id = tId);
    }

My ViewModel;

public class TeamFormViewModel
{
    public long TeamId { get; set; }
    public String TeamName { get; set; }
    public String TeamCrest { get; set; }
    public String TeamWebsite { get; set; }
}

My View;

image

My JavaScript Функция;

$(function () {
    $('a#hrefsubmit').click(function () {
        $('form#hrefSubmitForm').submit();
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...