2010-04-23 37 views
1

我有這個代碼的簡單用戶控件:ASP.NET:按鈕在用戶控件不回發

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Pager.ascx.cs" Inherits="Pager" %> 
<table style="width: 100%;"> 
    <tr> 
     <td runat="server" id="PageControls"> 
      <!-- This button has the problem: --> 
      <asp:Button ID="btnPrevPage" runat="server" Text="&larr;" OnClick="btnPrevPage_Click" /> 
      Page 
      <asp:DropDownList runat="server" ID="ddlPage" AutoPostBack="true" OnSelectedIndexChanged="ddlPage_SelectedIndexChanged" /> 
      of 
      <asp:Label ID="lblTotalPages" runat="server" /> 
      <!-- This button has the problem: --> 
      <asp:Button ID="btnNextPage" runat="server" Text="&rarr;" OnClick="btnNextPage_Click" /> 
     </td> 
     <td align="right" runat="server" id="itemsPerPageControls"> 
      <asp:Literal ID="perPageText1" runat="server" /> 
      <asp:DropDownList ID="ddlItemsPerPage" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlItemsPerPage_SelectedIndexChanged" /> 
      <asp:Literal ID="perPageText2" runat="server" /> 
     </td> 
    </tr> 
</table> 

正如你所看到的,2個按鈕連接到單擊事件,這是在正確定義代碼隱藏。

現在,這裏是我包括我的頁面上的控件的實例:

<uc:Pager ID="Pager1" runat="server" TotalRecords="100" DisplayItemsPerPage="true" 
     ItemsPerPageChoices="10,25,50,100" ItemsPerPageFormatString="Sessions/Page: {0}" 
     PageSize="25" OnPageChanged="PageChanged" OnPageSizeChanged="PageChanged" /> 

我注意到雖然,在我的用戶控制2個按鈕,點擊後並沒有引起後背部。不過,下拉列表確實會導致回發。以下是呈現的HTML:

<table style="width: 100%;"> 
    <tr> 
     <td id="ctl00_MainContent_Pager1_PageControls" align="left"> 
      <!-- No onclick event! Why? --> 
      <input type="submit" name="ctl00$MainContent$Pager1$btnPrevPage" value="←" id="ctl00_MainContent_Pager1_btnPrevPage" /> 
      Page 
      <select name="ctl00$MainContent$Pager1$ddlPage" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MainContent$Pager1$ddlPage\',\'\')', 0)" 
       id="ctl00_MainContent_Pager1_ddlPage"> 
       <option value="1">1</option> 
       <option selected="selected" value="2">2</option> 
       <option value="3">3</option> 
       <option value="4">4</option> 
       <option value="5">5</option> 
       <option value="6">6</option> 
      </select> 
      of <span id="ctl00_MainContent_Pager1_lblTotalPages">6</span> 
      <!-- No onclick event! Why? --> 
      <input type="submit" name="ctl00$MainContent$Pager1$btnNextPage" value="→" id="ctl00_MainContent_Pager1_btnNextPage" /> 
     </td> 
     <td id="ctl00_MainContent_Pager1_itemsPerPageControls" align="right"> 
      Sessions/Page: 
      <select name="ctl00$MainContent$Pager1$ddlItemsPerPage" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MainContent$Pager1$ddlItemsPerPage\',\'\')', 0)" 
       id="ctl00_MainContent_Pager1_ddlItemsPerPage"> 
       <option value="10">10</option> 
       <option selected="selected" value="25">25</option> 
       <option value="50">50</option> 
       <option value="100">100</option> 
      </select> 
     </td> 
    </tr> 
</table> 

而且,正如您所看到的,在按鈕的輸入元素中沒有呈現onclick屬性。爲什麼不?

編輯

羅尼,你爲什麼這麼愚蠢??? <input type="submit" />不使用JavaScript發佈表單!

回答

6

即使在按鈕上也不點擊,因爲它們是輸入類型=提交,因此不需要JavaScript來引起回發。

在頁面中是否有任何可能導致問題的更新面板?

你在頁面上有任何驗證器可能會停止回發嗎?如果是這種情況,您可能需要將CausesValidation設置爲false。

您是否在頁面的Page_Load中設置了斷點並控制,而不是僅在Click事件中檢查該斷點是否正常工作。

你有沒有做過任何有關禁用ViewState?

+0

我有頁面上的jQuery驗證。向按鈕添加cssclass =「cancel」會導致它們不會導致驗證。我沒有看到驗證錯誤,因爲它們顯示在隱藏的模式對話框中。 – 2010-04-23 17:22:32

相關問題