2011-05-12 59 views
0

我只是試圖更新自定義控件(其中包含一箇中繼器)從一個下拉列表onchange事件,觸發一些JavaScript。更新包含中繼器自定義控制與javascript中的updatepanel問題

所以下拉列表和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 <'...'>爲空,或者不是數百萬行數過大的對象。

回答

0

我發現在你的JavaScript代碼的一些問題:

  1. document.getElementById('ctl00_ContentPane_ctl01_pnlPanelStageBandLetterTemplate')返回HTML元素不是字符串(請參閱參考資料:getElementById
  2. __doPostBack需要兩個字符串參數,但你正在傳遞一個HTML元素作爲第一個
  3. 使用<%: pnlPanelStageBandLetterTemplate.ClientID %>無論您何時想要使用面板的ID
  4. 使用'<%: pnlPanelStageBandLetterTemplate.UniqueID %>'作爲第一個參數__doPostBack

要看到一個有效的回發調用它是如何由ASP.NET生成,把這個地方上(因爲你想傳遞一個字符串,不要忘了單引號)您的頁面:

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

它應該呈現這樣的事情到您的網頁:

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

這可能是你在找什麼(除了硬合代表第二個參數)。

試着解決這些問題,讓我們知道你有多遠。

乾杯,奧利弗

相關問題