【问题标题】:How to refresh mvc views and partial views simultaneously using javascript?如何使用 javascript 同时刷新 mvc 视图和部分视图?
【发布时间】:2014-12-09 22:10:16
【问题描述】:

我有一个按钮点击删除部分视图的表格中的一行,我希望点击也刷新整个父页面 AND 刷新后重新打开部分视图,现在将有少一排。 这是一个棘手的问题,如果整个父页面正常打开(通过操作链接或其他方式),我永远不需要加载部分视图有什么建议吗?

【问题讨论】:

  • 我的第一个建议是停止使用局部视图等,并开始使用客户端数据绑定库,例如 Knockout、Angular 等。因为您会造成不必要的复杂性
  • @No1_Melman 您提到的客户端数据绑定库可以在 MVC-5 中使用吗?
  • 当然,因为它是 javascript,它与您选择的服务器端编程语言无关。使用 MVC,您可以在页面中添加 <script></script> 标签,还可以像使用 jQuery 一样捆绑文件,这意味着您甚至可以拥有带有源代码控制的文件版本!

标签: javascript jquery asp.net-mvc


【解决方案1】:

您可以使用 datatables .. 在 Jquery 中制作表格的最佳库。您可以使用 ajax request 以任何形式为其提供数据。它还有许多功能可以解决您动态重新渲染网格的问题..

看看http://www.datatables.net/

【讨论】:

  • 我已经围绕网络网格构建了我的项目,这是一个很大的因素吗?
  • 这实际上取决于您的应用程序的可扩展性和松散耦合程度。我建议首先尝试对您的 DOM 进行建模,以便您可以使用 AJAX 重新加载它...因此首先尝试一下...
  • 他的问题是刷新封闭页面,而不仅仅是数据表/网格,他刷新得很好。数据表无法解决这个问题。
【解决方案2】:

尝试使用 ajax(我认为 jquery ajax 是最容易理解的)。所以当父页面加载时,只需将事件绑定到您的按钮并使用 ajax 到 url.action

 $(document).on('click', '.appoint', load);

     function load(userId, type) {

            $.ajax({
                type: 'POST',
                url: '@Url.Action("AppointUser", "Profile")',
                traditional: true,
                data: {
                    userId: userId,
                    type: type
                },
                success: function(response) {"smth"}
                  });
        }

【讨论】:

  • 我试过了,我得到了相反的结果,它首先加载部分视图,然后重新加载整个页面。
  • 那么在这个例子中我会把location.reload(true);放在哪里,然后我会把$(someDiv).load(SomeUrlAction);放在哪里?
【解决方案3】:

只需隐藏java脚本中页面加载的部分视图

通过隐藏您用于加载部分视图的 Div

      or

如下加载局部视图

@Html.Partial("PartialViewName", new Classname())

我在上面定义的 ClassName 必须与您的局部视图名称空间匹配

【讨论】:

    【解决方案4】:

    发布您的代码以获得更多有用的反馈,但要点是,您希望能够在加载时有条件地加载您的部分。删除行并重新加载父页面的代码应将标志(查询参数)传递给封闭页面,以使其知道这是一种特殊情况(例如 reloadPartial=true)

    然后您将该标志在您的 ViewModel 中传递回您的父视图,父视图将使用它来启用部分的条件加载。

    同样,您发布的代码将更容易解释。

    【讨论】:

    • 我不愿意这样做,因为这是我第三次问同样的问题。这是the first time I asked it,这是second time, just 2 hours ago,更重要的是
    • 好的,你错过了页面的生命周期。基本上,无论如何都会触发您的 AJAX 完成回调,并且一旦您重新加载该位置,您将获得一个新页面,在此之前没有任何问题。所以你真的应该忘记重新加载部分视图。只需在成功时重新加载页面,但向其传递一个查询参数以指示您要重新加载部分视图。这真的没那么难,但你需要很好地掌握事件的顺序才能做到这一点,我认为你最好先理解这一点。
    • "向它传递一个查询参数以指示您要重新加载局部视图" location.reload(true) 中添加一些内容吗? :D
    • 我已经知道如何只重新加载部分视图,但是一旦我尝试重新加载整个页面,无论我做什么,它总是最后一件事。跨度>
    • 对,因为重新加载整个页面,会给你一个新页面,之前发生的一切都已经过去了。这就像您加载 facebook.com 而不是您的页面一样,在此之前您在 javascript 中所做的一切都不重要。一切都过去了。
    猜你喜欢
    • 2015-01-26
    • 2021-07-16
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多