2010-12-11 54 views
8

我創建ASP.NET用戶控件的JavaScript功能:Javascript函數

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="BingTranslator.Web.WebUserControl1" %> 
<script type="text/javascript"> 
    function example() { 
     alert('<%=ExampleButton.ClientID%>'); 
     return false; 
    } 
</script> 
<asp:Button ID="ExampleButton" runat="server" Text="Example"/> 

我想打電話「示例」功能時用戶移動鼠標按鈕,所以添加的屬性爲按鈕:

ExampleButton.Attributes.Add("onmouseover", "example()"); 

它運作良好,但是當我需要同一頁上的兩個控件我有一個問題。 ASP.NET代碼生成兩個函數具有相同的名稱,什麼是錯的:

<script type="text/javascript"> 
    function example() { 
     alert('TestControl1_ExampleButton'); 
     return false; 
    } 
</script> 
<input type="submit" name="TestControl1$ExampleButton" value="Example" id="TestControl1_ExampleButton" onmouseover="example()" /> 


<script type="text/javascript"> 
    function example() { 
     alert('TestControl2_ExampleButton'); 
     return false; 
    } 
</script> 
<input type="submit" name="TestControl2$ExampleButton" value="Example" id="TestControl2_ExampleButton" onmouseover="example()" /> 

而上的任何按鈕總是onmouseover事件將調用第二功能。我可以通過將java腳本代碼直接添加到attriburte onmouseover來解決此問題。

ExampleButton.Attributes.Add("onmouseover", "[Here will be javascript code]"); 

但是它不是很和諧的解決辦法。請指教,我如何能更好地解決此類問題。

P.S.將會有更多的Javascript代碼,例如,我添加了兩個字符串upper。

回答

7

您需要ClientScriptManager註冊腳本 - 這樣他們可以註冊一次,不管多久控件添加到頁面:

// Get a ClientScriptManager reference from the Page class. 
ClientScriptManager cs = Page.ClientScript; 

// Check to see if the startup script is already registered. 
if (!cs.IsStartupScriptRegistered(cstype, csname1)) 
{ 
    String cstext1 = "alert('Hello World');"; 
    cs.RegisterStartupScript(cstype, csname1, cstext1, true); 
} 
+1

是的,我那朵可能的方式解決,但我不希望javascript代碼進入CS文件,因爲它的體積很大。 – Anton 2010-12-11 12:48:27

+2

@Anton - 聽起來像你需要重構你的CS文件。 – Oded 2010-12-11 12:49:35

8

您需要使用this.id

$(document).ready(function() { 
    load_v<%= this.ID %>  
}); 

function load_v<%= this.ID %>(fromclick) { 
    alert('anything'); 
} 

因此,即使您需要兩個或更多相同的控件在同一頁面,他們將有不同的ID。 希望這有助於!歡呼:)

+0

但是,無論如何,這將創建許多相同的Javascript函數,這就是應該避免的。另外,我想在'ready'事件中你想寫'load_v <%= this.ID%>()',對吧?那麼'fromclick'是什麼? – Andrew 2016-04-20 14:36:25

20

我發現另一個網站,它允許您使用外部文件

if (!Page.ClientScript.IsClientScriptIncludeRegistered("key")) 

{ 

    string url = ResolveClientUrl("~/Scripts/file.js"); 

    Page.ClientScript.RegisterClientScriptInclude("key", url); 

} 
+3

爲什麼這不是公認的解決方案?你是一個人生的救星:D – tfrascaroli 2014-12-14 19:09:28