Renderpartial в foreach l oop отправляет только первый элемент в списке - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь отправить пользователя в списке пользователей для частичного просмотра, но частичный просмотр занимает только первого пользователя в списке. Код правильно отображает имя пользователя и ссылку action на профиль, но по какой-то причине только первый пользователь в списке отправляется в частичное представление на каждой итерации.

То, что я хочу сделать, - это динамическое отображение частичного представления «verifyDelete» при нажатии кнопки удаления и удаление нужного пользователя.

Помощь приветствуется!

Редактировать: Мне кажется, что я вижу проблему сейчас, я называю URL, указывающий на действие удаления "RedirectTo" в каждом частичном представлении, и также все подразделения имеют одинаковый идентификатор. Все еще не знаю, как чтобы исправить это, хотя.

MainView:

@foreach (var item in ViewBag.UsersList as List<CommonLibrary.User>)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.UserName)
        </td>
        <td>
            @Html.ActionLink("Profile", "ProfilePage", new { id = item.UserId }) |
            @{
                var user = Homepage.Service.SessionHelper.GetSessionUser(Context);
                if (user != null && user.GetType().ToString() == "CommonLibrary.Operator" && item.UserId != user.UserId)
                {
                    <button id="@item.UserId" class="btn-danger" onclick="confirmDelete()">Delete</button>
                    <div style="width:40%; float:right;">

                        @{

                            await Html.RenderPartialAsync("_ConfirmDelete", item);
                        }
                    </div>

                }
            }
        </td>
    </tr>
}

Частичное представление:

@model CommonLibrary.User

@Html.Hidden("RedirectTo", Url.Action("Delete", "Users", new { id = Model.UserId }))
<div style="display:none" id="confDelete">
    <div>
        <b>Are you sure you want to delete user: @Model.UserName?</b>
    </div>
    <button id="Yes" class="btn-danger" onclick="deleteConfirmed()">Yes</button>
    <button id="No" class="btn-secondary" onclick="hideDelete()">No</button>
</div>

<script>
    function confirmDelete() {
        $("#confDelete").show();
        $("#del_btn").hide();
    }
    function hideDelete() {
        $("#confDelete").hide();
        $("#del_btn").show();
    }
    function deleteConfirmed() {
        var url = $("#RedirectTo").val();
        location.href = url;
    }
</script>

1 Ответ

0 голосов
/ 18 февраля 2020

Я понял это, используя UserId в качестве идентификатора для различных элементов.

Основной вид:

  <tbody>
        @foreach (var item in ViewBag.UsersList as List<CommonLibrary.User>)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.UserName)
                </td>
                <td>
                    @Html.ActionLink("Profile", "ProfilePage", new { id = item.UserId }) |
                    @{
                        var user = Homepage.Service.SessionHelper.GetSessionUser(Context);
                        if (user != null && user.GetType().ToString() == "CommonLibrary.Operator" && item.UserId != user.UserId)
                        {
                            <button id="@item.UserId" class="btn btn-danger" onclick="confirmDelete(this.id)">Delete</button>
                            <div style="width:40%; float:right;">
                                @{
                                    await Html.RenderPartialAsync("_ConfirmDelete", item);
                                }
                            </div>

                        }
                    }
                </td>
            </tr>
        }
    </tbody>
</table>
<script>
    function confirmDelete(id) {
        var element = document.getElementById("div" + id);
        element.style.display = "block";
    }
    function hideDelete(id) {
        var element = document.getElementById("div" + id);
        element.style.display = "none";
    }
    function deleteConfirmed(id) {
        var url = "/Users/Delete/" + id;
        window.location.href = url;
    }
</script>

Частичный вид:

@model CommonLibrary.User

@{
    var divId = "div" + Model.UserId.ToString();
}
<div style="display:none" id="@divId">
    <div>
        <b>Are you sure you want to delete user: @Model.UserName?</b>
    </div>
    <button id="@Model.UserId.ToString()" class="btn btn-danger" onclick="deleteConfirmed(this.id)">Yes</button>
    <button id="@Model.UserId.ToString()" class="btn btn-secondary" onclick="hideDelete(this.id)">No</button>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...