У меня есть представление, которое показывает изображение и имя спортивной команды с 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;
My JavaScript Функция;
$(function () {
$('a#hrefsubmit').click(function () {
$('form#hrefSubmitForm').submit();
});
});