2013-01-12 66 views
1
<script type="text/javascript"> 

    function ClientSideClick(myButton) { 
     //make sure the button is not of type "submit" but "button" 
     if (myButton.getAttribute('type') == 'button') { 
      // disable the button 
      myButton.disabled = true; 
      //myButton.className = "btn-inactive"; 
      myButton.value = "Posting..."; 
     } 
     return true; 
    } 

</script> 



<asp:UpdatePanel ID="upComments" runat="server" UpdateMode="Always" > 
    <ContentTemplate> 

     <asp:ListView ... > 

      <asp:Button ID="btnSubPostComment" runat="server" Text="Reply Comment" 
         CommandName="cmdPostSubComment" OnClientClick="ClientSideClick(this)" UseSubmitBehavior="false" 

     </asp:ListView> 

    </ContentTemplate> 
</asp:UpdatePanel> 

Javascript函數(ClientSideClick)在處理時禁用按鈕。ASP.NET:更新面板中ListView內的按鈕導致完全回傳

的問題是,當我包括 的OnClientClick =「ClientSideClick」 UseSubmitBehavior =「假」 在我的按鈕,即使它是一個更新面板內它會導致完全回發。

如果我刪除這兩個屬性OnClientClic和UseSubmitBehavior該按鈕不會導致完整回發。有誰知道爲什麼發生這種情況?

我想要做的就是禁用按鈕,並改變它的文本以防止多次提交。

+0

您是否嘗試過沒有「返回true」? – 2GDev

+0

@ 2GDev「返回true」用於重新啓用按鈕,但即使沒有該行,它仍會使按鈕導致完整的回發。 –

+0

@EricBergman - 你爲什麼認爲它會導致完整的回發?我測試了你的代碼,並且它做了部分回發......你是否在沒有任何其他邏輯可能干擾的新頁面上嘗試它? – Blachshma

回答

1

我不知道,如果這是你在尋找什麼,但我通常使用這樣的:

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
<script type="text/javascript"> 
var pbControl = null; 
var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.add_beginRequest(BeginRequestHandler); 
prm.add_endRequest(EndRequestHandler); 

function BeginRequestHandler(sender, args) { 
    pbControl = args.get_postBackElement(); 
    pbControl.disabled = true; 
} 
function EndRequestHandler(sender, args) { 
    pbControl.disabled = false; 
    pbControl = null; 
} 
</script> 
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
     <asp:ListView ... > 
      <asp:Button ID="btnSubPostComment" runat="server" Text="Reply Comment" CommandName="cmdPostSubComment" OnClientClick="this.value='Posting...';" /> 
     </asp:ListView> 
    </ContentTemplate> 
</asp:UpdatePanel> 

唯一的問題是,如果同一個按鈕再次單擊第一個異步回發後,再它會拋出一個「操作因對象當前狀態而無效」的錯誤。這可能會以500內部服務器錯誤的形式顯示爲JavaScript異常。 「在做了一些研究之後,我碰到了:

」微軟最近(12-29-2011)發佈了一個更新,以解決.NET Framework中的幾個嚴重安全漏洞,最近推出了MS11-100,用於處理潛在的DoS攻擊。不幸的是,這個修復程序也打破了頁面POSTs的大量發佈數據(表單域)。MS11-100對回發項目設置了500個限制。最近安全更新引入的新的默認最大值爲1000。

斯科特谷寫到這裏:http://weblogs.asp.net/scottgu/archive/2011/12/28/asp-net-security-update-shipping-thursday-dec-29th.aspx

添加設置鍵值到網絡配置文件克服了這個錯誤:

<appSettings> 
    <add key="aspnet:MaxHttpCollectionKeys" value="2000" /> 
</appSettings> 
相關問題