[英]ASP.Net How do I execute a dynamic JavaScript and prevent a postback
我有ASP按鈕和2個標簽。
<asp:Button runat="server" ID="btnHide" />
<asp:Label runat="server" ID="lblName"></asp:Label>
<asp:Label runat="server" ID="lblPosition"></asp:Label>
我創建了一個動態JS腳本。
string jsbtnHide = @"document.getElementByID('" + lblName.ClientID + @"').value = '';
document.getElementByID('" + lblPosition.ClientID + @"').style.display = 'none';";
我將腳本分配給按鈕。 我已經嘗試過“ OnClick”和“ OnClientClick”。
btnHide.Attributes.Add("OnClick", jsbtnHide);
但是,我無法使腳本成功執行且沒有回發。 我嘗試添加OnClientClick =“ return false;” 動態和ascx文件。 動態地似乎被忽略了,盡管它在FireBug中看起來是正確的。 OnClick似乎並沒有阻止回發。 當腳本運行時,lblName不會更改為”,也沒有一次可以使用。
我究竟做錯了什么? 我去過這里好幾天了:(
您可以使用一個好的技巧,只需將點擊代碼更改為此
string jsbtnHide = @"document.getElementByID('" + lblName.ClientID + @"').value = '';
document.getElementByID('" + lblPosition.ClientID + @"').style.display = 'none';return;";
在代碼末尾添加return,以防止調用回發事件
嘗試將要執行的JS代碼包裝在JS函數中,然后使用該函數和附加的return false語句將按鈕連接起來。
像這樣:
public string DynamicJSCode; //Page level
//Page_Load
DynamicJSCode = @"function doSomeWork(){document.getElementById('" + lblName.ClientID + @"').innerText= '';
document.getElementById('" + lblPosition.ClientID + @"').style.display = 'none'; return false;}";
然后,您可以使用屬性(或任何其他方式)將上述JS嵌入頁面中。
<script type='text/javascript' language='javascript'>
<%= DynamicJSCode %>
</script>
然后將功能連接到按鈕,如下所示:
btnHide.Attributes.Add("onclick", "return doSomeWork();");
為了防止按鈕控件不回發,您將不得不使用return;
致電(毫無疑問)。
(根據我的理解),這將稍微易於維護,然后您也不需要在后面的代碼中附加按鈕事件處理程序附件。 然后,您可以在標記本身中將JS函數調用分配給OnClientClick
事件,並且始終會動態生成執行的代碼。
<asp:Button runat="server" ID="btnHide" OnClientClick='doSomeWork();return false;' />
無論功能的大小或重要性如何,始終建議編寫具有更好可維護性的代碼。
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.