【问题标题】:ASP.NET Web Forms access control on page from JavaScript来自 JavaScript 的页面上的 ASP.NET Web 窗体访问控制
【发布时间】:2019-11-02 02:46:27
【问题描述】:

我必须修改一个旧的 ASP.NET Web 窗体项目。我有一个带有表格的页面,我需要从后面的代码中加载数据。当页面加载时,我想为 JavaScript 中的数据表初始化它。问题是当 JavaScript 运行时,表还没有加载到页面中,因为它是 runat = server.我已经尝试将脚本块放在一个带有 runat=server 的 div 中,因为它们可能会同时出现。没运气。我知道脚本有效,因为如果我从表中删除 runat=server,它们会同时加载,并且它会被初始化为数据表。我也尝试过 RegisterStartupScript 和 RegisterScriptBlock,它们都不起作用。如果我不能让它工作,我可以通过其他方式加载数据。我需要该表作为 runat 服务器的唯一原因是从后面的代码中加载数据

  <script type="text/javascript">
     st();
     function st() {
            console.log('load datatable');
            $('[name = "employeeChangeHistory"]').DataTable();

            }

   </script>
     <table runat="server" name="employeeChangeHistory"  
       ..... 
    </table>

【问题讨论】:

  • 您真的能够将数据按原样加载到该表中吗?想知道你是否尝试过。 (如果已经用 Adriani6 的回答解决了,忽略这个。)
  • 嗨,我还是有同样的问题。基本上我可以关闭runat服务器并且javascript工作,因为页面同时加载了javascript和控件,或者将其放入并在javascript之后加载表格。我可以在 VS 的动态页面调试器中看到这一点。脚本加载,然后是表格
  • 好的。老实说,这个问题令人困惑。听起来您需要两张表,一张从代码隐藏加载,一张从 js(DataTables)加载(创建)。或者可能只是一个,您正在将数据从代码隐藏发送到 js,然后加载 DataTables?如果您可以将整个流程放入您的问题中,那将有很大帮助。添加代码隐藏的大纲(由按钮或页面加载或其他触发),然后是获取数据的大纲,以及 js 从何处获取数据;显示“事件”顺序的所有内容。
  • Fwiw,我在我的一个页面上使用 DataTables,我创建了整个 html 表 - 带有数据 - 作为代码隐藏中的字符串,并将其发送到 js 应用到元素页面。
  • 啊。所以问题实际上是时机。你也是这么说的……如果你把defer放在脚本上怎么办? w3schools.com/tags/att_script_defer.asp另外/或确保您的脚本位于页面末尾。在您的问题中,它是 before html。如果是第一个,则表标签还没有出现在页面上,但是脚本正在寻找它却找不到它

标签: javascript datatables


【解决方案1】:

编辑:

您不能将table html 标记呈现为 ASP.NET 控件,因为它不是一个。

您应该考虑改用asp:Table

&lt;asp:Table runat="server" ID="employeeChangeHistory"&gt;

并使用

调用您的javascript

$("#&lt;%= employeeChangeHistory.ClientID %&gt;").DataTable();

【讨论】:

  • 哦,我正要试试你以前的解决方案。该表可以作为 runat 服务器正常工作
  • 看起来我必须以不同方式重新声明表格,如此处所示? stackoverflow.com/questions/13475335/table-is-not-working
  • @PatrickGoode 正确。这是因为就像我说的,您不能将表格 html 标记呈现为 ASP.NET 控件。这就是为什么 ASP.Net 控件以&lt;asp:&lt;control&gt;&gt; 为前缀的原因。将其更改为 ASP 表后,您将能够使用上述 javascript 按 ID 定位元素。
  • 您好,感谢您的回复。我做了上面的更改,但是同样的问题仍然存在。所以问题不在于不知道表格的 id 是什么,它是脚本运行并且表格尚未呈现。我已尝试准备好内部文件,但我认为它的触发时机不对。
  • @PatrickGoode 不,不是。该表将在 javascript 运行之前呈现。该页面在服务器上呈现,然后发送到客户端,在客户端上运行 javascript。使用您当前拥有的代码编辑您的问题。
【解决方案2】:

尝试将defer 放在脚本上。 w3schools.com/tags/att_script_defer.asp。

另外/或确保您的脚本位于页面末尾。在您的问题中,它位于 html 之前。在继续之前,浏览器会完全读取脚本,所以如果它是第一个,脚本会查找它需要的 html 标签,但不会找到它们,因为它们还没有出现在页面上。将脚本放在最后有助于(但不保证)脚本可以找到它要查找的任何 html。 (Defer 有助于保证页面在脚本之前完全加载。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多