2011-10-03 10 views
0

PhoneTextBox2という名前のカスタムasp.netコントロールがあります。それはext.netライブラリを使用しますが、私は問題ではありません。 PhoneTextBox2の一意の名前です - aspxページでAsp.netカスタムコントロールとjavascript関数

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

は、私がこのよう

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

#{txtb}_getNumber() javascript関数の一意の名前があり、かつ#{txtb}によってPhoneTextBox2のjavascriptのメソッドを呼び出します。

getNumberを呼び出すにはどうすればいいですか?ドット

<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;"; 
} 

注、私は理由ext.netの機能のサーバー側のプロパティNumberを使用することはできません。したがって、私はNumberを得るためにjavascriptを使用する必要があります。

答えて

0

Handlerは、.NETカスタムメソッド/デリゲートを指し、名前にピリオド記号を付けることはできません。


次の例のように、任意のオブジェクト型を拡張することができます。

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

、その後

'txtElement'.getNumber(); 

をので、あなたは必要はありません

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

ハンドラポイント**のJavaScript ** 関数。 – Alexandre

+0

あなたはコントロールを指摘してソースコードを見ることができますか? – balexandre

+0

コードの最初のブロックを見てください。 – Alexandre

0

にコードを変更することができますあなたのjavascript関数に動的な名前を割り当てる。最初のコントロールが作成されたときにメソッドを登録し、コントロールの次のインスタンスが作成されたときに既に登録されているかどうかを確認するだけです。ファイル(外部JS)を含む登録

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

スクリプトブロックを登録するカスタム** **のJavaScript関数またはスタンダートext.netに

if (!Page.ClientScript.IsClientScriptIncludeRegistered("getNumberScript")) 
    Page.ClientScript.RegisterClientScriptInclude("getNumberScript", "getNumberScript.js"); 
関連する問題