4

我知道有很多关于此的帖子,但我已经尝试了每一个,但没有一个有效!

我有一个使用 Visual Studio 2010 运行的 aspx 和 aspx.cs 页面。

在我的 aspx 页面上,我有一张桌子

<table id="viewPendingTable" runat="server"></table>

在 aspx.cs 页面上,表中加载了数据。这工作正常,没问题。加载页面后,该表将包含我需要的动态添加的数据。

我正在使用 jquery dataTables 使用标准设置我的表格样式

$(document).ready(function () {
    $('#viewPendingTable').dataTable({
        "bJQueryUI": true,
    });
});

当我直接在 html 中创建带有虚拟信息的测试表时,数据表会根据需要正确显示。但是当我将 jquery 脚本应用于动态表时。什么都没发生。根据需要显示动态数据,但不存在数据表(搜索功能、样式等)。

现在我怀疑这是因为脚本是在表格填充数据之前运行的。

这是我开始执行任务的地方,即在 aspx.cs 运行并填充表之后强制 jquery/javascript 运行。

但我失败了......所以作为一个测试,我想我会运行一个 alert('YAAY'); 从 c# 端使用注册的启动脚本。但是没有用,那是行不通的。

所以有人可以告诉我为什么这不起作用。

我尝试了多种不同的启动脚本方式!

我的aspx是:

<table id="viewPendingTable" runat="server"></table>

<script type="text/javascript" language="javascript" id="ShowTable">
<!--
    loadTable();
    function loadTable() {
        $(document).ready(function () {
            $('#viewPendingTable').dataTable({
                "bJQueryUI": true,
                "sPaginationType": "full_numbers"
            });
        });
        alert('ALEX');
        document.getElementById("table_id").width = "100%";
    }
//-->
</script>

而我的 aspx.cs 是:

protected void Page_Load(object sender, EventArgs e)
{
    loadMyTable();
    ClientScriptManager a = null;
    a.RegisterStartupScript(GetType(), "anotherkey", "alert('ASDFASDFASDF');", true);
    a.RegisterStartupScript(GetType(), "anfgsdgsderkey", "alert('MOTHER');", false);
    a.RegisterStartupScript(this.GetType(), "AKey", "loadTable();", true);

    ClientScript.RegisterStartupScript(GetType(), "MyScript", "<script language=javascript>" + "alert('Hello ASP.NET'); }</script>");

    ScriptManager.RegisterStartupScript(this.Page, GetType(), "script", "alert('Success!');", true);

    Page.ClientScript.RegisterClientScriptBlock(GetType(), "script", "alert('AAA');", true);

    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "script",
        "alert('a');" +
        "$(document).ready(function (){" +
            "$('#viewPendingTable').dataTable({" +
                "\"bJQueryUI\": true" +
                "\"sPaginationType\": \"full_numbers\"" +
            "});" +
        "}); alert('b'); document.getElementById('viewPendingTable').width = 100%", true);

}

我已经尝试了更多方法来尝试在页面加载后运行 javascript,但是他们因失败而感到愤怒而迷失了方向。

有人请帮忙!

为什么我的简单 javascript 警报没有运行?

即使我让他们工作......数据表是否可以通过在页面加载后执行 jquery 来正确设置样式?

谢谢你的时间

亚历克斯

ps 没有关于 asp:gridView 或 asp:DataTable 的评论,因为它失败了,我几天前在上面发布了一个问题,没有人回复。如果你想看看 点击这里

4

3 回答 3

4

更改这行代码并尝试

"$('# " +   viewPendingTable.ClientID + "').dataTable({" +

在您编写的 document.read 脚本中

这是因为当页面在浏览器上呈现时,您可以获得表格控件的实际 ID

编辑 利用

RegisterStartupScript因为它在</form>标签之前的页面末尾(<form>标签结束之前)发出您的 JavaScript。

于 2011-07-19T09:57:11.367 回答
2

您面临的最有可能的问题是id="viewPendingTable"您的页面上不存在该问题。

通过在表上添加runat="server"属性,ID 将被更改,以便 ASP.NET 可以在回发时绑定到它。

您需要ClientID在 jQuery 中使用表的属性:

viewPendingTable.ClientID
于 2011-07-19T09:57:17.523 回答
2

首先,客户端代码总是在服务器端代码执行后运行。尽管可以在浏览器中呈现 html 之前运行客户端代码。所以这与那个无关。

如果您检查生成的 html,您将看到 asp.net 将生成 id 的 voor 您应用 runat 属性的元素。为了解决这个问题,向表中添加一个类并将你的 js 选择器更改为 $(".classname")。

额外提示:使用像firebug这样的调试器,它可以让你调试你的js代码,这样可以很容易地解决这些问题:)

于 2011-07-27T07:32:13.640 回答