Javascript-функции внутри ASP.NET User Control - PullRequest
12 голосов
/ 11 декабря 2010

Я создал пользовательский элемент управления ASP.NET с функцией 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]");

Но это не очень гармоничное решение, как для меня.Посоветуйте, пожалуйста, как мне лучше решить эту проблему.

PS Там будет гораздо больше кода Javascript, я добавил, например, две строки сверху.

Ответы [ 3 ]

27 голосов
/ 24 октября 2013

Я нашел решение на другом сайте, которое позволяет использовать внешний файл

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

{

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

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

}
8 голосов
/ 03 января 2013

Вам необходимо использовать this.id

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

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

, чтобы даже если вам нужно два или более одинаковых элемента управления на одной странице, они будут иметь разные идентификаторыНадеюсь это поможет!ура :) 1007 *

7 голосов
/ 11 декабря 2010

Вам необходимо зарегистрировать свои скрипты с помощью 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...