Gridview внутри UpdatePanel не отображается в DOM
-
03-07-2019 - |
Вопрос
Я использую ASP net Ajax toolkit и у меня есть GridView
в пределах UpdatePanel
, все работает нормально.
Когда я пытаюсь запустить некоторые JQuery
в таблице, которая должна быть сгенерирована, нет никаких признаков GridView
(или таблица HTML
) в возвращаемом DOM-файле.Я предполагаю, что все это делается с помощью ASP generated Javascript
?
Как я могу выполнять какие-либо действия с GridView
это лежит в пределах UpdatePanel
?
Решение
ASP.NET изменит имена элементов управления при определенных условиях.Возможно, вам захочется просмотреть сгенерированный источник, чтобы убедиться, что вы ссылаетесь на элемент управления по имени, данному ему с помощью ASP.NET при его создании.Вероятно, это не то название, которое вы дали ему в наценке.
Другие советы
Если вы можете сгенерировать свой javascript в codebehind, в Page_Load для настойчивости, тогда вы можете ввести свой GridView1.ClientID и т.д. В свой javascript.(Например, здесь я использую текстовое поле, но оно следует той же концепции.)
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);
}
Есть три решения этой проблемы, которые я могу придумать.Первый, вводящий javascript с сервера с помощью ClientID, как предлагает Дейв, работает, но очень быстро становится очень запутанным.Я делал это некоторое время, но такая тесная связь на стороне сервера и клиента вызывает проблемы.
Второй способ заключается в предоставлении другого способа идентификации сущностей, такого как css-класс.Это лучше, чем первый вариант, но оставляет вас с большим количеством посторонних определений классов, которые вы должны соблюдать.
Решение, которое я предпочитаю, - использовать фреймворк JavaScript, такой как jQuery, который имеет механизм селекции.Таким образом, вы можете обойти мусор UniqueID с помощью некоторого умного выделения и обхода DOM.
Допустим, у вас есть элемент управления с именем MyControl.ASP.Перед этим Net сгенерирует огромное пространство имен, поэтому при рендеринге не будет никаких конфликтов идентификаторов.Но вы можете выбрать каждый MyControl, выполнив команду $('[id$=MyControl]'), которая выбирает каждый объект с идентификатором, заканчивающимся на MyControl.Вероятно, есть аналогичные способы сделать это в других фреймворках, но я недостаточно знаком с ними, чтобы привести пример.