【问题标题】:BeginCollectionItem Maintain Page Position MVC 5BeginCollectionItem 维护页面位置 MVC 5
【发布时间】:2015-11-17 18:01:35
【问题描述】:

我正在尝试找到在使用 beginCollectionItem 从列表中删除项目时保持页面滚动位置的最佳方法(目前任何方法)。

最初我认为这是由于我的主项目中的其他 javascript/jQuery 代码(它仍然可能是一个因素),但是当我仅使用 BCI 代码(索引,两个部分,控制器和模型),当从任一列表中删除项目时,页面会再次跳转到顶部,我真的需要(想要)停止,我该如何实现?

我已经看到this 的问题和我不知道如何正确实施的最佳答案,或者即使它仍然有效,第二个答案,使用我在_Layout 中测试过的下面的 JS,在 @ 987654323@ 没有解决问题。

jQuery 测试

$(document).scroll(function () {
    localStorage['page'] = document.URL;
    localStorage['scrollTop'] = $(document).scrollTop();
});
$(document).ready(function () {
    if (localStorage['page'] == document.URL) {
        $(document).scrollTop(localStorage['scrollTop']);
    }
});

学生部分

@model UsefulCode.Models.Person
<div class="editorRow">
    @using (Html.BeginCollectionItem("students"))
    {
        <div class="ui-grid-c ui-responsive">
            <div class="ui-block-a">
                <span>
                    @Html.TextBoxFor(m => m.firstName)
                </span>
            </div>
            <div class="ui-block-b">
                <span>
                    @Html.TextBoxFor(m => m.lastName)
                </span>
            </div>
            <div class="ui-block-c">
                <span>
                    <span class="dltBtn">
                        <a href="#" class="deleteRow">X</a>
                    </span>
                </span>
            </div>
        </div>
    }
</div>

教师部分

@model UsefulCode.Models.Person
<div class="editorRow">
    @using (Html.BeginCollectionItem("teachers"))
    {
        <div class="ui-grid-c ui-responsive">
            <div class="ui-block-a">
                <span>
                    @Html.TextBoxFor(m => m.firstName)
                </span>
            </div>
            <div class="ui-block-b">
                <span>
                    @Html.TextBoxFor(m => m.lastName)
                </span>
            </div>
            <div class="ui-block-c">
                <span>
                    <span class="dltBtn">
                        <a href="#" class="deleteRow">X</a>
                    </span>
                </span>
            </div>
        </div>
    }
</div>

索引

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@model UsefulCode.Models.Register
<div id="studentList">
@using (Html.BeginForm())
{
    <div id="editorRowsStudents">
        @foreach (var item in Model.students)
        {
            @Html.Partial("StudentView", item)
        }
    </div>
    @Html.ActionLink("Add", "StudentManager", null, new { id = "addItemStudents", @class = "button" });
}
</div>

<div id="teacherList">
@using (Html.BeginForm())
{
    <div id="editorRowsTeachers">
        @foreach (var item in Model.teachers)
        {
            @Html.Partial("TeacherView", item)
        }
    </div>
    @Html.ActionLink("Add", "TeacherManager", null, new { id = "addItemTeachers", @class = "button" });
}
</div>


@section scripts {
    <script type="text/javascript">
    $(function () {
        $('#addItemStudents').on('click', function () {
            $.ajax({
                url: '@Url.Action("StudentManager")',
                    cache: false,
                    success: function (html) { $("#editorRowsStudents").append(html); }
                });
                return false;
            });
            $('#editorRowsStudents').on('click', '.deleteRow', function () {
                $(this).closest('.editorRow').remove();
            });
            $('#addItemTeachers').on('click', function () {
                $.ajax({
                    url: '@Url.Action("TeacherManager")',
                    cache: false,
                    success: function (html) { $("#editorRowsTeachers").append(html); }
                });
                return false;
            });
            $('#editorRowsTeachers').on('click', '.deleteRow', function () {
                $(this).closest('.editorRow').remove();
            });
        });
    </script>
}

【问题讨论】:

    标签: javascript jquery asp.net-mvc


    【解决方案1】:

    除了让自己感到痛苦之外,我现在感觉自己松了一口气。 将return false; 添加到删除操作可以解决此问题,它存在于添加操作中,但由于盯着它看了几个小时,我以为它就在那里。

    如果有更好的答案,请输入,因为这只适用于这部分代码。

    下面是答案代码:

    $('#addItemStudents').on('click', function () {
                $.ajax({
                    url: '@Url.Action("StudentManager")',
                        cache: false,
                        success: function (html) { $("#editorRowsStudents").append(html); }
                    });
                    return false;
                });
                $('#editorRowsStudents').on('click', '.deleteRow', function () {
                    $(this).closest('.editorRow').remove();
                    return false; // add this
                });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多