2011-10-03 5 views
0

Существует пользовательский элемент управления asp.net с именем PhoneTextBox2. Он использует библиотеку ext.net, но я не имею никакого значения.Функция пользовательского контроля и javascript Asp.net

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PhoneTextBox2.ascx.cs" 
    Inherits="Loginet.Web.Controls.PhoneTextBox2" %> 

<script type="text/javascript"> 
       var <%=ClientID%>_getNumber = function() { 
       return alert('some value'); 
      } 
     </script> 
<ext:CompositeField runat="server" ID="eCompositeField"> 
     <Items> 
      <ext:Label ID="PhoneBoxTitle" runat="server" /> 
     </Items> 
</ext:CompositeField> 

В ASPX странице я называю яваскрипта метод PhoneTextBox2 таким путем

<uc:PhoneTextBox2 runat="server" ID="txtb" /> 
<ext:Button Text="test" runat="server"> 
     <Listeners> 
      <Click Handler="#{txtb}_getNumber();"></Click> 
     </Listeners> 
</ext:Button> 

#{txtb}_getNumber() это уникальное имя яваскрипта функции и #{txtb} - это уникальное имя PhoneTextBox2.

Что я могу сделать, чтобы позвонить getNumber по dot?

<Click Handler="#{txtb}.getNumber();"> 

UPDATE:

public partial class PhoneTextBox2 : System.Web.UI.UserControl { 
      /// <summary> 
      /// Допускаются ли, чтобы все поля были пустыми 
      /// True - Допускаются. Используется тогда, когда данные из этого контрола необязательные. 
      /// </summary> 
      public bool EnableEmptyValues { get; set; } 
      public string Title { get; set; } 
      protected void Page_Load(object sender, EventArgs e) { 

       txtCountryCode.AllowBlank = EnableEmptyValues; 
       txtCityCode.AllowBlank = EnableEmptyValues; 
       txtMainPhoneNumber.AllowBlank = EnableEmptyValues; 

       if (!IsPostBack && !Ext.Net.ExtNet.IsAjaxRequest) { 
        PhoneBoxTitle.Text = Title; 
        if (!string.IsNullOrWhiteSpace(DataSource)) { 

         string[] phoneNumberArray = DataSource.Split('-'); 
         if (phoneNumberArray.Length >= _standartDimension) { 
          txtCountryCode.Text = phoneNumberArray[0]; 
          if (txtCountryCode.Text[0] == _plus) { 
           txtCountryCode.Text = txtCountryCode.Text.Remove(0, 1); 
          } 
          txtCityCode.Text = phoneNumberArray[1]; 
          txtMainPhoneNumber.Text = phoneNumberArray[2]; 
          if (phoneNumberArray.Length >= _extraDimension) { 
           txtExtraPhoneNumber.Text = phoneNumberArray[3]; 
          } 
         } 
        } 
       } 
      } 


      public string DataSource { get; set; } 


      private const string _phoneNumberMask = "+{0}-{1}-{2}-{3}"; 
      private const char _plus = '+'; 
      private const int _standartDimension = 3; 
      private const int _extraDimension = 4; 

      public string Number { 
       get { 
        if (!string.IsNullOrWhiteSpace(txtCountryCode.Text) && 
         !string.IsNullOrWhiteSpace(txtCityCode.Text) && 
         !string.IsNullOrWhiteSpace(txtMainPhoneNumber.Text)) { 

         //Если добавочный номер пустой, то возвратить значения без него 
         if (!string.IsNullOrWhiteSpace(txtExtraPhoneNumber.Text)) 
          return string.Format(_phoneNumberMask, txtCountryCode.Text, txtCityCode.Text, txtMainPhoneNumber.Text, txtExtraPhoneNumber.Text); 

         string phoneNumber = string.Format(_phoneNumberMask, txtCountryCode.Text, txtCityCode.Text, txtMainPhoneNumber.Text, string.Empty); 
         return phoneNumber.Remove(phoneNumber.Length - 1); 

        } 
        return string.Empty; 
       } 
      } 


      public bool IsEmpty { 
       get { 
        return (string.IsNullOrWhiteSpace(txtCountryCode.Text) && 
          string.IsNullOrWhiteSpace(txtCityCode.Text) && 
          string.IsNullOrWhiteSpace(txtMainPhoneNumber.Text) && 
          string.IsNullOrWhiteSpace(txtMainPhoneNumber.Text)); 
       } 
      } 




      /// <summary> 
      /// Validate 
      /// </summary> 
      public void Validate() { 
       if (EnableEmptyValues) { 
        if (!IsEmpty && Number == string.Empty) 
         MarkInvalid(); 
        else 
         MarkValid(); 
       } 

       else { 
        if (IsEmpty) 
         MarkInvalid(); 
        else { 
         if (Number == string.Empty) 
          MarkInvalid(); 
         else 
          MarkValid(); 
        } 
       } 
      } 

      public void MarkInvalid(string msg = null) { 
       txtCountryCode.MarkInvalid(msg); 
       txtCityCode.MarkInvalid(msg); 
       txtMainPhoneNumber.MarkInvalid(msg); 
       txtExtraPhoneNumber.MarkInvalid(msg); 

      } 

      public void MarkValid() { 
       txtCountryCode.MarkAsValid(); 
       txtCityCode.MarkAsValid(); 
       txtMainPhoneNumber.MarkAsValid(); 
       txtExtraPhoneNumber.MarkAsValid(); 
      } 


      public const string InvalidCheckBoxCssStyle = "border-color:#C30; background: url('/extjs/resources/images/default/grid/invalid_line-gif/ext.axd') repeat-x scroll center bottom white; width: 40px !important;"; 
     public const string ValidCheckBoxCssStyle = "border-color:#000; background: none repeat scroll 0 0 transparent;"; 
} 

Обратите внимание, в моем случае я не могу использовать на стороне сервера свойство Number из-за особенности ext.net. Поэтому мне нужно использовать javascript для получения Number.

ответ

0

Handler указывает на пользовательский метод/делегат .NET, и они не могут иметь знаки периода в своих именах.

не

Вы можете расширить любой тип объекта, например:

String.prototype.getNumber = function() { 
    alert('here: ' + this); 
}; 

, а затем

'txtElement'.getNumber(); 

так что вы можете изменить свой код

<Click Handler="'{txtb}'.getNumber();"> 
+0

Handler указывает на обычай ** Javascript ** функция или стандартный ext.net ** Javascript ** функция. – Alexandre

+0

Можете ли вы указать элемент управления, чтобы я мог видеть исходный код? – balexandre

+0

Посмотрите на первый блок кода. – Alexandre

0

Там нет необходимости присвоить динамическое имя вашей функции javascript Тион. Просто зарегистрируйте метод при создании первого элемента управления и проверьте, уже ли он зарегистрирован, когда создается следующий экземпляр элемента управления.

Регистрация блок сценария:

if (!Page.ClientScript.IsClientScriptBlockRegistered("getNumberScript")) 
    Page.ClientScript.RegisterClientScriptBlock(GetType(), "getNumberScript", "getNumber = function() { return alert('some value'); }", true); 

Регистрация включаемый файл (внешние JS):

if (!Page.ClientScript.IsClientScriptIncludeRegistered("getNumberScript")) 
    Page.ClientScript.RegisterClientScriptInclude("getNumberScript", "getNumberScript.js"); 
Смежные вопросы