Первый щелчок модальный не открывается на стороне сервера .NET 5 Blazor

#asp.net #bootstrap-4 #blazor #blazor-server-side #.net-5

#asp.net #bootstrap-4 #blazor #blazor-на стороне сервера #.net-5

Вопрос:

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

 <div class="card-columns">
    @foreach (var project in ProjectService.GetProjects())
    {
        <div class="card">
            <div class="card-img" @onclick="(e => SelectProject(project.Id))" data-toggle="modal" data-target="#projectModal" style="background-image: url('@project.Image'); cursor: pointer;"></div>
            <div class="card-body">
                <h5 class="card-title">@project.Title</h5>
        </div>
        </div>
    }
</div>

    @if (selectedProject != null)
{
<div class="modal fade" id="projectModal" tabindex="-1" role="dialog" aria-labelledby="projectTitle" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered" role="document">
        <div class="modal-content">
...
 

C#:

               @code { 
                    Project selectedProject;
                    string selectedProjectId;
                    void SelectProject(string projectId)
                    {
                        selectedProjectId = projectId;
                        selectedProject = ProjectService.GetProjects().First(x => x.Id == projectId);
                        Console.WriteLine("hi");
                    }
 

При самом первом щелчке он считывает консоль.Строка записи, но не показывает модальный, поэтому я знаю, что selectedProject не равен null, и предполагается, что он показывает модальный. Я попытался закомментировать весь код javascript, который у меня был, и все еще проблема. Я также загрузил новую копию bootstrap и заменил ее в своем проекте, поскольку я по ошибке заменил некоторые значения (в основном шрифты) и обнаружил, что мне никогда не следует редактировать bootsrap. Проблема все еще существует. В браузере также нет ошибки консоли.

Ответ №1:

Итак, это не совсем правильно, и я бы сказал, что это ленивый способ исправить эту проблему, потому что я до сих пор не знаю, в чем корень проблемы, но я решил свою проблему, введя событие наведения курсора мыши в card-img div:

 <div class="card-img" @onclick="(e => SelectProject(project.Id))" @onmouseover="(e => start(project.Id))" data-toggle="modal">
 

C#

 bool unlock;
void start(string projectId)
{
  if (!unlock)
  {
    selectedProjectId = projectId;
    selectedProject = ProjectService.GetProjects().First(x => x.Id == projectId);
    unlock = true;
  }
}
 

Теперь в первый раз и только один раз, когда мышь перемещается по карте, будет запущен режим open, но поскольку он не открывается с первой попытки, он в основном ничего не делает, но также делает его интерактивным с первой попыткой щелчка.