我正在使用 ASP 网络 Ajax 工具包,并且在GridView
内有一个UpdatePanel
,一切正常。
当我尝试JQuery
对应该生成的表运行一些操作时,返回的 DOM 中没有任何GridView
(或 table )的迹象。HTML
我假设这都是由 ASP 生成的Javascript
?
如何对GridView
位于 a 内的a 执行任何操作UpdatePanel
?
我正在使用 ASP 网络 Ajax 工具包,并且在GridView
内有一个UpdatePanel
,一切正常。
当我尝试JQuery
对应该生成的表运行一些操作时,返回的 DOM 中没有任何GridView
(或 table )的迹象。HTML
我假设这都是由 ASP 生成的Javascript
?
如何对GridView
位于 a 内的a 执行任何操作UpdatePanel
?
ASP.NET 在特定条件下会破坏控件的名称。您可能需要查看生成的源代码,以确保您引用的是由 ASP.NET 在生成时为其指定的名称的控件。它可能不是您在标记中给出的名称。
如果您可以在代码隐藏中生成您的 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);
}
我能想到三个解决方案。第一个,如 Dave 建议的那样,使用 ClientID 从服务器注入 javascript,虽然有效,但很快就会变得非常混乱。我这样做了一段时间,但是服务器端和客户端的这种紧密耦合会导致问题。
第二种是提供另一种识别实体的方法,例如 css 类。这比第一个选项要好,但是会给您留下很多无关的类定义,您必须保持直截了当。
我更喜欢的解决方案是使用像 jQuery 这样的具有选择器引擎的 javascript 框架。这样,您可以通过一些巧妙的选择和 DOM 遍历来绕过 UniqueID 垃圾。
假设您有一个名为 myControl 的控件。ASP.Net 会在此之前生成一个巨大的命名空间,因此在渲染时不会有任何 id 冲突。但是您可以通过执行 $('[id$=myControl]') 来选择每个 myControl,它会选择 ID 以 myControl 结尾的每个对象。在其他框架中可能有类似的方法可以做到这一点,但我对它们还不够熟悉,无法举个例子。