2013-07-13 57 views
1

我曾經在一個ASP.Net web表單以下按鈕:提交按鈕的onclick JavaScript的渲染從asp.net 2.0 diffrences至4.0

<asp:Button id="btn_submit" text="Submit (Click only Once)" OnClick="process_form" runat="server" /> 

在頁面代碼中,我所使用 以下函數禁用多次提交(這工作得很好ASP.Net 2.0下)...

private sub prevent_multiple_submits() 

dim sb as StringBuilder 

sb = New StringBuilder() 

sb.Append("this.value = 'Please wait...';this.disabled = true;") 
sb.Append(Page.ClientScript.GetPostBackEventReference(btn_submit, String.Empty)) 

btn_submit.Attributes.Add("onclick", sb.ToString()) 

end sub 

當頁面ASP.Net 2.0呈現的HTML如下(工作得很好)下運行...

<input type="submit" name="btn_submit" value="Submit (Click only Once)" onclick="this.value = 'Please wait...';this.disabled = true;__doPostBack('btn_submit','');" id="btn_submit" /> 

當頁面ASP.Net 4.0下運行呈現的HTML如下:

<input type="submit" name="btn_submit" value="Submit (Click only Once)" onclick="this.value = &#39;Please wait...&#39;;this.disabled = true;__doPostBack(&#39;btn_submit&#39;,&#39;&#39;);" language="javascript" id="btn_submit" /> 

...出於某種原因,就像它在按鈕上都不顯示爲殘疾...( ASP.Net 2.0)...

該表單仍然提交和一切正常 - 但按鈕從未出現點擊後禁用?!

是否有其他人處理過這種行爲? ..如果是這樣,你有沒有發現,而不訴諸改變web.config中,使用JQuery解決方案等

BTW,

我發現下面的參考;但在ASP.Net 4.0下沒有任何工作可以幫助我。

ASP.NET, javascript: silly annoying apostrophe problem

HTMLEncode/HTMLDecode and the apostrophe ASP.net

我想這個問題應該是如何添加一個轉義JavaScript代碼來一個asp.net按鈕?

在此先感謝

回答

0

好吧,

我覺得有點愚蠢,因爲嘗試了一下後,看來雖然ASP.Net 4.0渲染比ASP.Net 2.0不同 - 代碼實際上仍在工作。這是按鈕被禁用 - 它只是從來沒有出現這種方式。

問題是,當按鈕被禁用通過JavaScript,沒有視覺線索,它發生,即:按鈕沒有出現「灰色了」像以前的版本。爲了證實這一點,我改變了prevent_multiple_submits子程序如下:

private sub prevent_multiple_submits() 

dim sb as StringBuilder 

sb = New StringBuilder() 

sb.Append("this.disabled=true;this.style.backgroundColor='#EFEFEF';this.style.color='#000000';this.value='Please wait...';") 
sb.Append(Page.ClientScript.GetPostBackEventReference(btn_submit, String.Empty)) 

btn_submit.Attributes.Add("onclick", sb.ToString()) 

end sub 

現在 - 單擊該按鈕時,該按鈕會變爲灰色(表示已禁用) - 它用來在ASP.Net發生2.0自動。沒有顏色變化 - 按鈕從不會顯示禁用(即使它是) - 這是2.0和4.0渲染之間的區別。

希望這可以幫助別人。

再次感謝。

0

您可以完全去除prevent_multiple_submits子並添加onClientClick屬性,您的按鈕可以避免這一點:

<asp:Button id="btn_submit" text="Submit (Click only Once)" OnClick="process_form" runat="server" onClientClick="this.value = 'Please wait...';this.disabled = true;" /> 

雖然我會採取它更進了一步:

onClientClick="disable(this)" 

<script type="text/javascript"> 
    function disable(elem) { 
     elem.value = "Please wait..."; 
     elem.disabled = true; 
    } 
</script> 

或者使用jQuery,也刪除onClientClick

$(document).ready(function() { 
    $('form').submit(function() { 
     $('input[id^="btn_submit_"]').prop('disabled', true).val('Please wait...'); 
    }); 
}); 

另一個jQuery的解決方案,它隱藏按鈕,而不是禁用的:

$(document).ready(function() { 
    $('form').submit(function() { 
     var btn = $('input[id^="btn_submit_"]'); 
     btn.after('<span>Please wait...</span>'); 
     btn.hide(); 
    }); 
}); 

當然兩者的jQuery解決方案的香草JS是可能的,但語法是更詳細的,你必須來關注一下吧。

+0

嗨傑森 - 謝謝你花時間回答。我嘗試使用上面的「onClientClick」代碼進行測試 - 不幸的是,它不起作用 - 問題是提交按鈕被禁用,並且「process_form」從未被執行。我寧願一個ASP.Net唯一的解決方案,而不是不得不求助於JQuery – bdcoder

+0

有沒有人使用ASP.Net 4.0做到了這一點?它甚至有可能不使用JQuery? – bdcoder

+0

@ user1377587我給出的前兩個解決方案不使用jQuery。所以這是一個不同的問題,禁用按鈕會導致表單不提交。經過一些研究,我不確定你的解決方案過去是如何工作的(也許這是2.0和4.0之間的另一個區別)。您可以隱藏該按鈕並在文本上添加一個「Please wait」。我已編輯添加該解決方案。 –