UpdatePanel中的Gridview不会在DOM中呈现

时间:2009-01-03 00:20:04

标签: asp.net ajax gridview updatepanel

我正在使用ASP net Ajax工具包并在GridView中有一个UpdatePanel,一切正常。

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

完成

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

3 个答案:

答案 0 :(得分:2)

ASP.NET会在某些条件下破坏控件的名称。您可能希望查看生成的源,以确保在生成时由ASP.NET提供的名称引用控件。它可能不是您在标记中给出的名称。

答案 1 :(得分:0)

如果你可以在代码隐藏中生成你的javascript,在Page_Load for insistence中,那么你可以将你的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);
}

答案 2 :(得分:0)

我能想到有三种解决方案。第一个,从服务器注入带有ClientID的JavaScript,正如戴夫所说的那样,可以正常工作,但实际上非常麻烦。我这样做了一段时间,但服务器端和客户端的这种紧密耦合会导致问题。

第二种是提供另一种识别实体的方法,例如css类。这比第一个选项更好,但是你需要保留很多无关的类定义。

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

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