Проблема обновления панели обновления, содержащей повторитель в пользовательском элементе управления с помощью JavaScript - PullRequest
0 голосов
/ 12 мая 2011

Я просто пытаюсь обновить пользовательский элемент управления (который содержит повторитель) из события onchange раскрывающегося списка, которое запускает некоторый JavaScript.

Итак, выпадающий список и панель обновления таковы: -

<asp:UpdatePanel runat="server" ID="pnlPanelStageBandLetterTemplate" Visible="false" UpdateMode="Conditional">
<ContentTemplate>
    <asp:DropDownList runat="server" ID="ddlBand">
        <asp:ListItem Selected="True" Text="1" Value="1" />
        <asp:ListItem Text="2" Value="2" />
        <asp:ListItem Text="3" Value="3" />
        <asp:ListItem Text="4" Value="4" />
        <asp:ListItem Text="5" Value="5" />
        <asp:ListItem Text="6" Value="6" />
    </asp:DropDownList>
    <panelStageLetters:PanelStageBandLetterTemplate id="psbltPanelStageBandLetterTemplate" runat="server">
</panelStageLetters:PanelStageBandLetterTemplate>
</ContentTemplate>        

выпадающий ddlband отображается следующим образом: -

ddlBand.Attributes.Add("onchange", "changeCutBand('" +   pnlPanelStageBandLetterTemplate.ClientID + "')");
ddlBand.ID = "ddlBand";

при выборе выпадающего списка запускается следующий код: -

function changeCutBand(panelID) {
var cbc = ($(".cutBandChanger")[0]);
val = cbc.value;
var wsid = getQueryVariable('wsid');
if (val != "0") {
    $.get("changecutband.ajax?action=changecutband&newcutmethod=" + val + "&wsid=" + wsid);
    var panelID = document.getElementById('ctl00_ContentPane_ctl01_pnlPanelStageBandLetterTemplate');
    var ddID = document.getElementById('ctl00_ContentPane_ctl01_ddlBand');
    __doPostBack(panelID, val);
}

}

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

Моя проблема в том, что база данных обновляется, но панель обновления не обновляется. Все, что я получаю, это ошибка javascript, говорящая, что document.getelementbyid <'...'> является нулем или не является объектом с чрезмерно большим числом строк в миллионах.

1 Ответ

0 голосов
/ 14 мая 2011

Я обнаружил несколько проблем в вашем коде JavaScript:

  1. document.getElementById('ctl00_ContentPane_ctl01_pnlPanelStageBandLetterTemplate') возвращает элемент HTML , , а не строку (см. Ссылку: getElementById )
  2. __doPostBack ожидает два строковых параметра, но вы передаете элемент HTML в качестве первого
  3. используйте <%: pnlPanelStageBandLetterTemplate.ClientID %> везде, где вы можете использоватьидентификатор вашей панели
  4. используйте '<%: pnlPanelStageBandLetterTemplate.UniqueID %>' в качестве первого аргумента __doPostBack (не забывайте апострофы, так как вы хотите передать строку)

Чтобы увидеть действительный постбэкНазовите, как это генерируется ASP.NET, поместите это где-нибудь на своей странице:

<%: ClientScript.GetPostBackEventReference(pnlPanelStageBandLetterTemplate, "arg") %>

Это должно отразить что-то вроде этого на вашей странице:

__doPostBack('ctl00$ContentPane$ctl01$pnlPanelStageBandLetterTemplate','arg')

Это, вероятно, то, что выищите (за исключением жестко заданного второго параметра).

Попробуйте исправить это и сообщите нам, как далеко вы продвигаетесь.

Приветствия, Оливер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...