Создание настраиваемых событий на стороне клиента в веб-пользовательском элементе управления ASP.NET

Я разрабатываю Web-user control с Text-box. Теперь мне нужно вызвать событие Text-box's Client из моего aspx page. Может ли кто-нибудь сказать мне, как я могу создавать настраиваемые события на стороне клиента.

Редактировать-1

Мне нужно создать пользовательские события на стороне клиента в моем пользовательском элементе управления. Так что я могу использовать это событие для вызова любой java-scriptфункции со страницы .aspx, где я использовал свой настраиваемый элемент управления.

Редактировать-2

Мой контроль

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl2.ascx.cs" Inherits="WebUserControl2" ClientIDMode="Predictable" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxControl" %>
<link rel="stylesheet" href="GridViewCSSThemes/YahooGridView.css" type="text/css" media="screen" />
<script type="text/javascript">
    function isNumber(evt, id) {
        var a = document.getElementById(id).value;
        evt = (evt) ? evt : window.event;
        var charCode = (evt.which) ? evt.which : evt.keyCode;
        if (a.indexOf(".") >= 0
        && charCode == 190) {
            return false;
        }
        else
            if (charCode != 46 && charCode != 37 && charCode != 39 && charCode != 34 && charCode != 190 && charCode != 110 && charCode > 31 && (charCode < 48 || charCode > 57)) {
                if (charCode < 96 || charCode > 105) {
                    return false;
                }
            }
        return true;
    }

    function formateValue(id) {
        var a = document.getElementById(id).value;
        var f = a.split(".");
        if (f.length > 2) {
            document.getElementById(id).value = f[0] + "." + f[1];
        }
        a = document.getElementById(id).value;
        if (a.indexOf(".") >= 0) {
            document.getElementById(id).value = a.substr(0, a.indexOf(".") + 1) + a.substr(a.indexOf(".") + 1, 4);
        }
        else if (a.length > 7) {
            document.getElementById(id).value = a.substr(0, 7) + "." + a.substr(7, a.length);
        }
        document.getElementById(id).title = "Input value: " + document.getElementById(id).value;
        document.getElementById('<%= Hidden_Value.ClientID%>').value = document.getElementById(id).value;
    }
    function test(id) {
        alert(document.getElementById(id).value);
    }
</script>
<div style="position:relative;border:none;" id="BssWebMasked">
    <asp:HiddenField ID="Hidden_Value" Value="" runat="server" />
    <asp:TextBox CssClass="tb10" Width="90" ID="txtAmt" runat="server" style="text-align:right;" 
        MaxLength="12" onkeydown="return isNumber(event, this.id)" onkeyup="formateValue(this.id)" >
    </asp:TextBox>
    <ajaxToolkit:FilteredTextBoxExtender ID="FilteredTextBoxExtender1" runat="server" TargetControlID="txtAmt" 
            ValidChars="0123456789." Enabled="True" />
    <asp:CompareValidator ID="CVAmt" runat="server" 
        ErrorMessage="Invalid value" Display="Dynamic"
        Operator="DataTypeCheck" Type="String" ControlToValidate="txtAmt" >
    </asp:CompareValidator>
</div>

Код .aspx

<%@ Register TagPrefix="uc1" TagName="UCMask" Src="~/WebUserControl2.ascx" %>
<uc1:UCMask runat="server" DValue="" ID="txtRate" />

Здесь мне нужно вызвать java-script function на onblur событии.

Ex.:

<uc1:UCMask runat="server" DValue="" ID="txtRate" onCustomBlur="myFunction(this.id);"/>

person Ashish Rathore    schedule 29.08.2013    source источник
comment
Вопрос немного сбивает с толку - особенно из-за того, что как я могу создавать пользовательские события на стороне клиента. Ваш вопрос о том, как я могу вызвать функцию javascript из aspx.cs ??   -  person Prash    schedule 29.08.2013
comment
Мне нужно создать пользовательские события на стороне клиента в моем пользовательском элементе управления. Так что я могу использовать это событие для вызова любой java-scriptфункции со страницы .aspx, где я использовал свой настраиваемый элемент управления. Думаю, теперь вы знаете, что мне нужно делать.   -  person Ashish Rathore    schedule 29.08.2013
comment
Это интересно!! Но я не могу придумать сценарий, почему вам нужно настраиваемое событие на стороне клиента. Однако, используя ответ @ ivan.savik, вы можете вызвать клиентский скрипт. В случае, если это не то, что вы ищете, если вы сможете изложить свой сценарий, возможно, люди получат лучшее представление о том, чего вы пытаетесь достичь.   -  person Prash    schedule 29.08.2013
comment
Понятно. Фактически, вы можете предоставить свойство (в данном случае OnCustomBlur) и указать в пользовательском элементе управления установщик свойства для регистрации клиентского скрипта с помощью ClientScript.RegisterClientScriptBlock   -  person Prash    schedule 29.08.2013
comment
Я сделал свойство под названием callOnBlur. И в событии OnLoad пользовательского элемента управления я добавил функцию javascript, подобную этой txtAmt.Attributes["onblur"] = callOnBlur;. Она вызывает функцию javascript, но при следующем событии размытия элемента управления.   -  person Ashish Rathore    schedule 29.08.2013
comment
позвольте нам продолжить обсуждение в чате   -  person Ashish Rathore    schedule 29.08.2013


Ответы (1)


Для события «OnLoad» вашего пользовательского элемента управления вам необходимо зарегистрировать запускаемый клиентский скрипт, в котором вы получите TextBox.ClientID и напишите свой код JavaScript. Что-то типа..

string javaScript = string.format("$(#'{0}').on('input', function() {alert('change occured');})", MyTextBox.ClientID);

Page.ClientScript.RegisterClientScriptBlock (this.GetType(),
    "MyClientChangeEventKey", 
     javaScript,      
      true);
person Ivan Sivak    schedule 29.08.2013