在PostBack上停止页面移动Razor部分HtmlBeginForm

时间:2015-05-11 13:49:44

标签: javascript jquery ajax razor asp.net-mvc-5

寻找与Web表单中的updatepanel类似的解决方案效果,但对于MVC,下面有点关于我的问题。我确信有很多方法可以做到这一点,但理想情况下我想要最好和最正确的方式。

我看过this question但无法让它发挥作用。

更新 它可以回发; MVC等价。我只需要为用户的观点维护页面的位置。

我在我的索引页面底部尝试了以下但没有骰子。

@section Scripts
{
<script type="text/javascript">
    window.scrollTo = function( x,y ) {
     return true;
    }
</script>
}

以及: 的控制器

ViewBag.JumpTo = "equipmentAnchor";
            return RedirectToAction("Index");

索引

<div id="equipmentAnchor"></div>
@section Scripts
{
<script type="text/javascript">
    $(document).ready(function () {
        var JumpTo = '@ViewBag.JumpTo';
        if (JumpTo != "") {
            $(this).scrollTop($('#' + JumpTo).position().top);
        }
    });
</script>
}

实现这一目标的最佳/最简单方法是什么?

我已经看到有关AJAX在服务器上很重的报道,但没有过多关注,最好没有CSS技巧(如果有的话)。 JQuery不是我过于熟悉的东西,但可能会成为最好的解决方案,但不是特别精通它,所以不知道从哪里开始。

在下面的示例中是一个带有删除按钮的列表视图,该按钮返回到控制器以遍历列表并删除列表中的最后一个条目。但是,无论是添加,还是在这种情况下删除,页面都会在回发后跳转到索引页面的顶部。

我应该如何/可以阻止此回复并重新加载页面,或者至少阻止用户体验它?

示例代码:

索引:

<div class="List">
                    @{Html.RenderPartial("View", Model.List);}
                </div>

部分

@using (Html.BeginForm("RemoveExisting", "PA_4"))
{
    if (Model != null)
    {
        foreach (var ri in Model)
        {
            <div class="ui-grid-c ui-responsive">
                <div class="ui-block-a">
                    <p>One</p>
                    <span>
                        @ri.One
                    </span>
                </div>
                <div class="ui-block-b">
                    <p>Two</p>
                    <span>
                        @ri.Two
                    </span>
                </div>
            </div>
        }
    }
    if (Model.Count() > 0)
    {
        <div>
            <input type="submit" value="Remove"/>
        </div>
    }
}

1 个答案:

答案 0 :(得分:2)

如果有这个问题,这个答案here帮助了我。

从GitHub下载并将其转储到您的脚本文件夹中,并在@section Scripts

中引用它

在视图底部如此:

@section Scripts
{
<script type="text/javascript" src="~/Scripts/maintainscroll.jquery.min.js">

</script>
}