Funzioni Javascript all’interno ASP.NET Controllo Utente

Ho creato ASP.NET il controllo dell’utente con la funzione 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"/>

Voglio chiamare “esempio” funzione quando l’utente sposta il mouse a pulsante, così ho aggiunto attributo per il pulsante:

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

Funziona bene, ma quando ho bisogno di due controlli sulla stessa pagina ho avuto un problema. ASP.NET genera il codice con due funzioni con lo stesso nome, cosa c’è di sbagliato:

<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()" />

E sempre evento onmouseover su uno qualsiasi dei pulsanti di chiamata seconda funzione. Io sono in grado di risolvere questo problema con l’aggiunta di codice java script con l’Id del client direttamente attriburte onmouseover.

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

Ma non è molto armonioso soluzione per me. Si prega di avvisare, come posso meglio risolvere tale problema.

P. S. Ci sarà molto di più di un codice Javascript, ho aggiunto due stringa superiore solo per esempio.

InformationsquelleAutor Anton | 2010-12-11



3 Replies
  1. 7

    È necessario registrare il proprio script con ClientScriptManager – in questo modo possono essere registrati una sola volta, indipendentemente di come spesso il controllo è stato aggiunto alla pagina:

    //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);
    }
    • Sì, è una strada possibile, Ma non voglio spostare il codice javascript in CS file a causa di enormi dimensioni.
    • Suona come avete bisogno di rifattorizzare il file CS.
  2. 27

    Ho trovato una soluzione in un altro sito che permette di utilizzare file esterno

    if (!Page.ClientScript.IsClientScriptIncludeRegistered("key"))
    
    {
    
       string url = ResolveClientUrl("~/Scripts/file.js");
    
       Page.ClientScript.RegisterClientScriptInclude("key", url);
    
    }
    • Perché non è questa l’unica soluzione? Hai una vita salvatore 😀
  3. 8

    È necessario utilizzare this.id

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

    In modo che anche se avete bisogno di due o più controlli nella stessa pagina si avrà id diversi.
    Spero che questo Aiuta! grazie 🙂

    • Ma questo creerà molti identiche funzioni Javascript in ogni caso, e questo è ciò che dovrebbe essere evitato. Inoltre, credo che nel ready evento voluto scrivere load_v<%= this.ID %>(), giusto? E la cosa che fromclick per?

Lascia un commento