UpdatePanel не работает с блоками кода
У меня есть ссылка на элемент управления (rcbModels), используя кодовый блок, как это
function pageLoad() {
models = $find("<%= rcbModels.ClientID %>");
}
Я добавил UpdatePanel на эту страницу, но всегда получаю следующую ошибку: "Невозможно изменить коллекцию Controls, поскольку элемент управления содержит блоки кода (т. Е. <%...%>)".
Я попытался изменить кодовый блок на:
function pageLoad() {
models = $find("<%# rcbModels.ClientID %>");
}
И DataBinding для события Pre_RenderComplete без успеха.
Какой лучший способ решить эту проблему?
3 ответа
похоже, что это может быть вызвано runat="server" в теге head. перемещение кода javascript в тело, но все еще за пределами панели обновления, может исправить это.
Спасибо за ваш ответ. В итоге я изменил "=" для "#" и добавил предложение DataBind() в коде, и это решило проблему.
function pageLoad() {
models = $find("<%# rcbModels.ClientID %>");
}
protected void Page_Load(object sender, EventArgs e)
{
Page.Header.DataBind();
}
Для простых случаев (тривиальная страница, контейнерная цепочка до rcbModels
никогда не меняется, качество кода не имеет значения), жесткое кодирование rcbModels.ClientId
в блок сценария экономит время и выполняет свою работу.
function pageLoad()
{
models = $find("panelX_containerY_rcbModels");
}
В других случаях генерируйте обще-страничный словарь клиентских идентификаторов элементов управления, отображающий идентификаторы клиентов.
protected void Page_PreRender(object sender, EventArgs e)
{
ScriptManager.RegisterClientScriptBlock(this, typeof(YourPageClass),
"__BehaviorIds", String.Format(CultureInfo.InvariantCulture, @"
var __BehaviorIds = {{
rcbModels: '{0}',
anotherControl: '{1}',
yetAnotherControl: '{2}'
}};",
rcbModels.ClientID,
anotherControl.ClientID,
yetAnotherControl.ClientID), true);
}
Затем вы можете получить доступ к идентификаторам поведения по имени на стороне клиента.
function pageLoad()
{
models = $find(__BehaviorIds.rcbModels);
anotherControl = $find(__BehaviorIds.anotherControl);
yetAnotherControl = $find(__BehaviorIds.yetAnotherControl);
}