как я могу использовать этот модал в моем foreach l oop? (HTML / Бритва) - PullRequest
0 голосов
/ 04 мая 2020

У меня есть кнопка, при нажатии которой открывается модальное окно с подтверждением, указывающее, хочет ли пользователь удалить выбранную строку или нет, поэтому на модальном поле есть опции «Да» и «Нет». С помощью кнопки «Да», выполняющей функцию onclick, которая отвечает за удаление позиции (эти операции выполняются в моем контроллере и не являются частью этого вопроса). Чтобы обеспечить немного фона, изначально функция onclick была частью моей кнопки, которая теперь открывает модал, и это работало отлично, как и предполагалось. Однако теперь эта кнопка служит только одной цели - открытию модального окна. В модальном режиме функция onclick теперь перемещена на кнопку «Да». Но теперь эта функция onclick не работает так, как она используется, и я считаю, что это как-то связано с foreach l oop, в котором все это находится.

Ниже приведен код кнопки и модальный:

@Model.CategoryList.result
        @if (Model.CategoryList.result == "")
        {
            int count = 0;

            foreach (String dataLine in Model.CategoryList.userData)
            {

                string countString = count.ToString();
                string target = "dataLine" + countString;
                string trigger = "#" + target;
                string deleteHolder = dataLine.Split(Model.CategoryList.delimiterChar)[0];

                <p>
                    <a data-toggle="collapse" href="@trigger" role="button" aria-expanded="false" aria-controls="collapseExample">
                        @dataLine.Split(Model.CategoryList.delimiterChar)[0]
                    </a>

                    <button class="btn" data-toggle="modal" data-target="#deleteHolder" id="@dataLine.Split(Model.CategoryList.delimiterChar)[1]"></button>

                </p>

               <div class="modal" id="deleteHolder" tabindex="-1" role="dialog">
                    <div class="modal-dialog" role="document">
                        <div class="modal-content">
                            <div class="modal-header">
                                <h5 class="modal-title">Modal title</h5>
                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                    <span aria-hidden="true">&times;</span>
                                </button>
                            </div>
                            <div class="modal-body">
                                <p>Modal body text goes here.</p>
                            </div>
                            <div class="modal-footer">
                                <button type="button" class="btn btn-primary" onclick="location.href = '@Url.Action("DeleteCategoryLine", "Index", new { id = dataLine.Split(Model.CategoryList.delimiterChar)[1] })'">Yes</button>
                                <button type="button" class="btn btn-secondary" data-dismiss="modal">No</button>
                            </div>
                        </div>
                    </div>
                </div>

                count++;


            }
        }

Проблема, с которой я столкнулся: Событие onclick удаляет строку в текстовом файле, поэтому у меня есть счетчик, триггер и цель для определения КАКОЙ строки для удаления. Однако после перемещения события onclick в мой модал он всегда удаляет первую строку в текстовом файле. Я не уверен, почему это происходит? Разве я не понимаю значение, которое представляет модал?

Мой контроллер Действие:

public ActionResult DeleteCategoryLine(int id, string changedItem)
        {
            string strFilePath = "~/App_Data/Category.txt";
            string strSearchText = id.ToString();
            string strOldText;

            string n = changedItem;
            StreamReader sr = System.IO.File.OpenText(Server.MapPath(strFilePath));
            while ((strOldText = sr.ReadLine()) != null)
            {
                string[] x = strOldText.Split(',');

                if (!x[1].Contains(strSearchText))
                {
                    n += strOldText + Environment.NewLine;
                }
            }
            sr.Close();
            System.IO.File.WriteAllText(Server.MapPath(strFilePath), n);
}

1 Ответ

1 голос
/ 04 мая 2020

Что касается нашего чата, ответ на этот вопрос заключался в том, что идентификатор модала не был уникальным, и поэтому он создавал первый, и все.

Я посоветовал OP добавить суффикс модала с уникальным ID

deleteHolder_@dataLine.Split(Model.CategoryList.delimiterChar)[1]

и, похоже, сработало.

...