【问题标题】:Gridview within an UpdatePanel does not render in the DOMUpdatePanel 中的 Gridview 不在 DOM 中呈现
【发布时间】:2010-09-29 07:58:56
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net ajax gridview updatepanel


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果您可以在代码隐藏中生成您的 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);
      }
      

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2020-02-08
          • 2012-03-04
          • 1970-01-01
          • 2023-03-27
          • 2014-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多