【问题标题】:MVC WebGrid renders AJaX script before its table. How to force the generation of script in script sectionMVC WebGrid 在其表之前呈现 AJaX 脚本。如何在脚本部分强制生成脚本
【发布时间】:2017-09-27 07:47:12
【问题描述】:

我的 Razor 视图中有一个 WebGrid。它很好地执行了分页和排序等任务。现在我需要在 ajax 调用中进行分页和排序,所以我给它分配了一个 ajaxUpdateContainerId。

现在当grid.GetHtml() 方法被调用时,它首先渲染它的脚本,然后渲染表格Html。我在页面末尾加载了 jquery(_Layout 视图中的脚本部分)。

因此,Ajax 函数无法找到 JQuery。

我有一个解决方法:我从页面源复制渲染的脚本并将其粘贴到视图的脚本部分,它可以工作,但这仍然会在控制台中留下错误,所以我认为这不是一个正确的解决方案。

另一种解决方法是在调用grid.GetHtml() 方法之前引用jquery,但这会留下对同一个javascript 库的两个引用。又是糟糕的设计。

那么有什么方法可以强制 WebGrid 在脚本部分呈现脚本,因为它应该在逻辑上表现。

【问题讨论】:

  • 当您在主页(包含部分视图的页面)中声明库和脚本引用时,您的网格应该能够毫无问题地访问其中的 jquery。尝试将 jquery 从 @script 部分移动到页面的标题,以查看您的 gridview 是否会看到 jquery。
  • @Dennis1679 是的,Jquery 可以移动到头部是对的。这将解决一些性能下降的问题。

标签: jquery ajax asp.net-mvc webgrid


【解决方案1】:
  1. 在局部视图中创建您的 WebGrid
  2. 在您的主页中调用 doc $(document).ready(function () 时,向您的控制器发出 ajax 调用以加载您的 webgrid 模型,然后将部分视图传回以加载到您的主页上。

这是一个例子,其中某人正在做非常相似的事情。当我遇到使用不同控件的类似情况时,我遵循了这种方法。 http://www.dotnetawesome.com/2014/11/how-to-implement-custom-paging-and-sorting-in-webgrid-using-jquery.html

【讨论】:

    【解决方案2】:

    您可以在视图中定义一个包含脚本的部分,并在加载 jquery 后呈现它

    在您的视图中(包含网格)

    @section scripts{
    
    <script>
    //My awesome Script
    </script>
    }
    

    在你看来 /Layout

    @RenderSection("scripts",required:false)
    

    您可以查看此以获取更多信息

    https://weblogs.asp.net/scottgu/asp-net-mvc-3-layouts-and-sections-with-razor

    【讨论】:

    • 你没有明白我的意思。我对 Razor Sections 没有任何问题。问题在于 WebGrid ajax 实现。 WebGrid 正在其自己的范围内定义其脚本。我需要它在脚本部分呈现 its 脚本,以便它按照问题中的定义工作。
    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 2011-03-23
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2013-04-23
    相关资源
    最近更新 更多