Gridview в UpdatePanel не отображается в DOM - PullRequest
3 голосов
/ 03 января 2009

Я использую набор инструментов ASP net Ajax и у меня есть GridView в пределах UpdatePanel, все работает нормально.

Когда я пытаюсь выполнить какое-то JQuery для таблицы, которая должна быть сгенерирована, в DOM, который возвращается, нет признаков GridView (или таблицы HTML) Я предполагаю, что это все сделано сгенерированным ASP Javascript?

Как я могу выполнить какие-либо действия с GridView, который находится внутри UpdatePanel?

Ответы [ 3 ]

2 голосов
/ 03 января 2009

ASP.NET изменяет имена элементов управления при определенных условиях. Возможно, вы захотите взглянуть на сгенерированный источник, чтобы убедиться, что вы ссылаетесь на элемент управления по имени, заданному им ASP.NET при его создании. Вероятно, это не имя, которое вы дали в разметке.

0 голосов
/ 11 февраля 2009

Я могу придумать три варианта решения этой проблемы. Первый, внедряющий javascript с сервера с ClientID, как предполагает Дэйв, работает, но очень быстро запутывается. Я делал это некоторое время, но такая тесная связь на стороне сервера и на стороне клиента вызывает проблемы.

Второй - предоставить другой способ идентификации сущностей, такой как класс css. Это лучше, чем первый вариант, но дает вам множество посторонних определений классов, которые вы должны соблюдать.

Решением, которое я предпочитаю, является использование фреймворка javascript, такого как jQuery, который имеет механизм выбора. Таким образом, вы можете обойти мусор UniqueID с помощью некоторого умного выбора и обхода DOM.

Допустим, у вас есть элемент управления с именем myControl. Перед этим ASP.Net сгенерирует огромное пространство имен, поэтому при рендеринге не будет никаких коллизий идентификаторов. Но вы можете выбрать каждый myControl, выполнив $ ('[id $ = myControl]'), который выбирает каждый объект с идентификатором, заканчивающимся на myControl. Вероятно, есть аналогичные способы сделать это в других средах, но я недостаточно знаком с ними, чтобы привести пример.

0 голосов
/ 11 февраля 2009

Если вы можете сгенерировать свой 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);
}
...