避免部分视图全屏刷新

时间:2014-04-09 08:51:03

标签: jquery asp.net-mvc asp.net-mvc-4 partial-views partial-page-refresh

想象一下具有部分视图的以下架构。

有时,当我们的应用程序出现错误时,由于此处未解释的原因,部分视图会全屏刷新。 此外,如果您复制/粘贴部分视图的网址,则会以全屏加载。

我们正在尝试找到一种解决方案,在加载部分视图网址时,它会正确加载完整的上下文并在自己的上下文中显示部分视图。 Windows Azure设法执行此操作(http://manage.windowsazure.com),我们愿意模仿此功能。

我们尝试在互联网上进行一些搜索,例如"在正确的上下文中刷新部分","问题部分视图在全屏刷新"等等...但我们还没有找到一种正确实现这一目标的方法。

有没有任何框架或解决方案可以做到这一点?你的想法是什么?

Partial View

3 个答案:

答案 0 :(得分:1)

如果您使用部分视图,则涉及明显的 ajax ,您需要做的是通过ajax进行部分视图。

例如:

如果你有部分内部表格你需要 Ajax.BeginForm 而不是 Html.BeginForm ,还有一件事是 jquery.unobtrusive-ajax < / strong>在主布局中存档以使工作正常。

如果你使用局部视图,那么你必须通过ajax处理事情的其他事情也是如此,这样你就不会失去上下文。

我希望它有所帮助。

答案 1 :(得分:0)

如果你想避免完全刷新,你必须使用ajax并替换id中的内容。如果这是你计划做的事情,这应该是一件容易的事。

您应该只需要将部分视图网址传递给jQuery.get。 jQuery.get

我希望你能找到的是什么。

答案 2 :(得分:0)

部分视图适用于可在网站上的许多地方使用的可重复使用的视图。

如果我们通过ajax加载它,我觉得这非常有用。

以下是示例。这也可以避免全屏刷新

_Layout.cshtml(或任何将加载部分页面的视图页面)

<div>
    <h2>This is Partial View content</h2>
    <div id="content"></div>
</div>

<script>
    $(function () {
        $("#content").html("Loading...");
        setTimeout(function () { LoadPartialView(); }, 5000);
    });
    function LoadPartialView() {
        $.ajax({
            type: "GET",
            url: '@Url.Action("GetPartialView", "Home")',
            dataType: "html",
            success: function (data) {
                $("#content").empty();
                $("#content").html(data);
                $("#content").fadeIn('slow');
            },
            error: function (data) {
                $("#content").empty();
            }
        });
    };
</script>

<强>模型

public class TestModel
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Address { get; set; }
}

控制人员的行动

    [HttpPost]
    public PartialViewResult GetPartialView()
    {
        TestModel model = new TestModel();

        model.Name="SomeName";
        model.Address="Somewhere";
        model.Age=25;

        return PartialView("_PartialTestPage", model);
    }

<强>已更新

为避免对部分视图进行硬编码访问,请使用重定向操作方法,该方法将重定向到主视图。像这样的东西。

    [HttpGet]
    [ActionName("MyOverloadedName")]
    public ActionResult GetPartialView()
    {
        return RedirectToAction("Index", "Home"); //redirect to the main view
    }

您可以通过设置HttpGet / HttpPost来制作两个具有相同名称的不同操作方法。 请在此处查看更多替代解决方案Can you overload controller methods in ASP.NET MVC?