【问题标题】:Renderpartial in a foreach loop only sends the first element in listforeach 循环中的 Renderpartial 仅发送列表中的第一个元素
【发布时间】:2020-02-18 12:52:08
【问题描述】:

我正在尝试将用户列表中的用户发送到部分视图,但部分视图只接收列表中的第一个用户。代码正确显示了用户名和操作链接以进行配置,但由于某种原因,每次迭代中只有列表中的第一个用户被发送到部分视图。

我要做的是在单击删除按钮时动态显示“confirmDelete”部分视图并删除正确的用户。

感谢您的帮助!

编辑: 我想我现在看到了问题,我在每个部分视图中将指向 Delete-Action 的 URL 命名为“RedirectTo”,并且所有部门都有相同的 id.. 仍然不知道如何解决它。

主视图:

@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>

【问题讨论】:

    标签: asp.net asp.net-mvc-partialview


    【解决方案1】:

    我通过使用 UserId 作为不同元素的 id 来解决这个问题。

    主视图:

      <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>
    

    【讨论】:

      猜你喜欢
      • 2014-05-22
      • 2019-10-30
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多