2014-10-07 12 views
0

天才,爲什麼我的後端C#代碼在不應該被執行時被執行?

我在我的前端代碼中有這個Javascript函數,我試圖推動更多的客戶端驗證步驟,以通過後端解除太多的驗證工作。這裏是JavaScript函數:

<script type = "text/javascript" > 
    function watchdelete() { 
     var manufacturer = document.getElementById('<%:drpManufacturer.ClientID%>'); 
     var model = document.getElementById('<%:drpModel.ClientID%>'); 
     var strManufacturer = manufacturer.options[manufacturer.selectedIndex].value; 
     var strModel = model.options[model.selectedItem]; 
     if (strManufacturer) // If there is a selected Manufacturer 
     { 
      if (confirm("Are you Sure you want to delete this Dimension Detail?")) 
      { 
       if (strModel) return true; 
       else 
       { 
        alert("Please select a car model first."); 
        return false; 
       } 
      } 
     } 
     else 
     { 
      alert("Please select a Manufacturer first before deleting"); 
      return false; 
     } 
    } 
</script> 
<asp:ScriptManager ID="scripman1" runat="server" EnablePageMethods="True"> 
</asp:ScriptManager> 

下面是與的OnClientClick指向JavaScript函數的onclick指向後端功能問題的刪除按鈕代碼:

<asp:Button ID="btnDimensionDel" runat="server" Text="Delete" OnClientClick = "watchdelete();" OnClick="btnDimensionDel_Click" /> 

我發現我的後臺C#代碼在不應該被調用的時候被調用。有什麼我可以做的改變這個?我在這裏做錯了什麼?

+1

你可以使用' OnClientClick =「return watchdelete();」'語句僅在您的watchdelete()返回true時執行 – Icepickle 2014-10-07 23:18:09

+0

Smarty褲子。這是正確的答案。您需要插入單詞return並返回false,否則它還會執行c#後端代碼。感謝那。不久之後我發現了答案。雖然沒有傷害分享。 – 2014-10-07 23:23:25

+0

如果您使用的是網頁表單,您應該在驗證控件中使用構建,它們處理客戶端和服務器端驗證,並且不應只依賴客戶端驗證。幾行驗證的額外負載服務器可以忽略不計。客戶端驗證的主要優勢是更流暢的用戶體驗。 – 2014-10-07 23:38:27

回答

-1

請務必在您的OnclientClick函數前插入關鍵字return並從Javascript函數返回false,以免C#後端被調用。

-1

在按鈕的事件上,您正在調用js方法,沒有別的。因此,在執行指定的方法後,瀏覽器將執行該按鈕的默認行爲。如果你想避免這種情況,你必須例如使用:OnClientClick = "watchdelete(); return false;"但是,因爲你的方法是返回的東西處理的情況,所以索性就可以回到你的方法的返回值:

<asp:Button ID="btnDimensionDel" runat="server" Text="Delete" OnClientClick = "return watchdelete();" OnClick="btnDimensionDel_Click" /> 
+1

Hiya,這可能很好的解決了這個問題......但是如果你可以編輯你的答案並提供一些關於它是如何工作和爲什麼工作的解釋,那就好了。不要忘記 - 有很多新手堆棧溢出,他們可以從你的專業知識中學到一兩樣東西 - 對你來說很明顯對他們來說可能不是這樣。 – 2014-10-08 01:21:53

+0

@TarynEast我的英語太糟糕了。所以解釋會是一團糟:) – 2014-10-08 09:57:51

+0

嘿,這不是太糟糕 - 一點解釋總比沒有更好,即使我們必須解開你想說的話);) – 2014-10-09 04:34:51

相關問題