Какие есть хорошие ресурсы jQuery, а также некоторые подводные камни при их использовании с ASP.Net?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Автоматически сгенерированные идентификаторы ASP.Net затрудняют использование синтаксиса селектора jQuery.
Два простых способа обойти эту проблему:
$('[id$=myid]')УХ ТЫ! Я не знал, что будет делать [id $ = myId], поэтому посмотрел в документация. Совпадение конца, так просто! Держу пари, что он использует Regex. Вы, вероятно, могли бы улучшить его, всегда ставя перед ним "_". БЛАГОДАРНОСТЬ! Вы получите золотую звезду!
Блог Рика Стрэла - хорошее место для начала. У него довольно много сообщений о jQuery.
Следует отметить, что если вы используете WebMethods для Ajax, значения ответа будут возвращены завернутыми в объект с именем «d» из соображений безопасности. Вам нужно будет развернуть это значение, что обычно не является проблемой, если вы не используете компонент (например, плагин jqGrid), который полагается на jquery ajax. Чтобы обойти это, я просто изменил код в сетке, который вызвал ajax, и вставил немного кода для развертывания. Я планирую отправить некоторый код команде jquery, чтобы посмотреть, можно ли его принять в будущих версиях.
Следующее, как упоминалось ранее, - это идентификаторы. Если у вас есть время и желание, я фактически разделил все элементы управления HTML на подклассы, чтобы сделать участие в NamingContainer необязательным, например:
protected override void RenderAttributes(HtmlTextWriter writer) {
HtmlControlImpl.RenderAttributes(this, writer);
}
И тогда вспомогательный объект (чтобы не писать один и тот же код в каждом объекте) выглядит так:
public static void RenderAttributes(IFormControl cntrl, HtmlTextWriter writer) {
if (cntrl.ID != null) {
cntrl.Attributes.Remove("id");
cntrl.Attributes.Remove("name");
writer.WriteAttribute("id", cntrl.RenderedId);
writer.WriteAttribute("name", cntrl.RenderedName);
}
cntrl.Attributes.Render(writer);
HtmlContainerControl containerCntrl = cntrl as HtmlContainerControl;
if (containerCntrl == null)
writer.Write(" /");
}
public static string GetRenderedId(IFormControl cntrl) {
return cntrl.UseNamingContainer ? cntrl.ClientID : cntrl.ID;
}
public static string GetRenderedName(IFormControl cntrl) {
return cntrl.UseNamingContainer ? cntrl.UniqueID : cntrl.ID;
}
Спасибо за замечание о $ ('[id $ = myid]'). Наконец-то я могу избавиться от своего "уникального мусора"!