web-dev-qa-db-ja.com

ASP.Netユーザーコントロール内のJavascript関数

Javascript関数を使用してASP.Netユーザーコントロールを作成しました:

<%@ 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"/>

ユーザーがマウスをボタンに移動したときに「example」関数を呼び出したいので、ボタンの属性を追加しました。

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

それはうまく機能しますが、同じページに2つのコントロールが必要な場合、問題が発生しました。 ASP.NETは、同じ名前の2つの関数を持つコードを生成します。何が問題なのですか。

<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イベントが2番目の関数を呼び出します。 JavaスクリプトコードとクライアントIDを直接追加して、マウスオーバーの属性を設定することで、この問題を解決できます。

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

しかし、それは私にとってあまり調和のとれた解決策ではありません。このような問題をより適切に解決する方法を教えてください。

P.S. Javascriptコードはもっとたくさんあるでしょう、例えば私は2つの文字列を上に追加しました。

13
Anton

スクリプトを ClientScriptManager で登録する必要があります。これにより、コントロールがページに追加された頻度に関係なく、スクリプトを1回登録できます。

// 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);
}
7
Oded

私はあなたが外部ファイルを使用することを可能にする別のサイトで解決策を見つけました

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

{

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

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

}
28
Ronen Festinger

使用する必要がありますthis.id

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

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

そのため、同じページに2つ以上の同じコントロールが必要な場合でも、それらのIDは異なります。お役に立てれば!乾杯:)

8