使用javascript更新自定义控件中包含转发器的updatepanel时出现问题

时间:2011-05-12 14:35:01

标签: javascript asp.net drop-down-menu updatepanel

我只是尝试从触发器onchange事件更新自定义控件(包含转发器),该事件触发了一些javascript。

所以dropdownlist和updatepanel就是这样: -

<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&lt;'...'&gt;为null或不是具有数百万的非常大的行号的对象。

1 个答案:

答案 0 :(得分:0)

我在你的javascript代码中发现了一些问题:

  1. document.getElementById('ctl00_ContentPane_ctl01_pnlPanelStageBandLetterTemplate')返回 HTML元素不是字符串(请参阅参考:getElementById
  2. __doPostBack需要两个字符串参数,但您要传递一个HTML元素作为第一个
  3. 当您想使用面板ID
  4. 时,尽可能使用<%: pnlPanelStageBandLetterTemplate.ClientID %>
  5. 使用'<%: pnlPanelStageBandLetterTemplate.UniqueID %>'作为__doPostBack的第一个参数(不要忘记撇号,因为你想传递一个字符串)
  6. 要查看有效的回发调用ASP.NET如何生成它,请将其放在页面上的某个位置:

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

    它应该在您的页面上呈现这样的内容:

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

    这可能就是你要找的东西(硬编码的第二个参数除外)。

    尝试解决这些问题,让我们知道你得到了多远。

    干杯,奥利弗