3

我正在使用 ASP 网络 Ajax 工具包,并且在GridView内有一个UpdatePanel,一切正常。

当我尝试JQuery对应该生成的表运行一些操作时,返回的 DOM 中没有任何GridView(或 table )的迹象。HTML我假设这都是由 ASP 生成的Javascript

如何对GridView位于 a 内的a 执行任何操作UpdatePanel

4

3 回答 3

2

ASP.NET 在特定条件下会破坏控件的名称。您可能需要查看生成的源代码,以确保您引用的是由 ASP.NET 在生成时为其指定的名称的控件。它可能不是您在标记中给出的名称。

于 2009-01-03T01:02:49.770 回答
0

如果您可以在代码隐藏中生成您的 javascript,在 Page_Load 中进行坚持,那么您可以将您的 GridView1.ClientID 等注入您的 javascript。(例如,我在这里使用了 TextBox,但它遵循相同的概念。)

protected void Page_Load(object sender, EventArgs e)
{
    string js = "$(document).ready(function(){$(\"#" + this.TextBox1.ClientID + "\").text('hello world');});";
    HtmlGenericControl script = new HtmlGenericControl("script");
    script.Attributes.Add("type", "text/javascript");
    script.InnerHtml = js;
    Page.ClientScript.RegisterStartupScript(this.GetType(), "key", js, true);
}
于 2009-02-11T20:24:34.770 回答
0

我能想到三个解决方案。第一个,如 Dave 建议的那样,使用 ClientID 从服务器注入 javascript,虽然有效,但很快就会变得非常混乱。我这样做了一段时间,但是服务器端和客户端的这种紧密耦合会导致问题。

第二种是提供另一种识别实体的方法,例如 css 类。这比第一个选项要好,但是会给您留下很多无关的类定义,您必须保持直截了当。

我更喜欢的解决方案是使用像 jQuery 这样的具有选择器引擎的 javascript 框架。这样,您可以通过一些巧妙的选择和 DOM 遍历来绕过 UniqueID 垃圾。

假设您有一个名为 myControl 的控件。ASP.Net 会在此之前生成一个巨大的命名空间,因此在渲染时不会有任何 id 冲突。但是您可以通过执行 $('[id$=myControl]') 来选择每个 myControl,它会选择 ID 以 myControl 结尾的每个对象。在其他框架中可能有类似的方法可以做到这一点,但我对它们还不够熟悉,无法举个例子。

于 2009-02-11T20:38:43.907 回答