Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net自定义控件和javascript函数_Javascript_Asp.net_Custom Controls - Fatal编程技术网

Asp.net自定义控件和javascript函数

Asp.net自定义控件和javascript函数,javascript,asp.net,custom-controls,Javascript,Asp.net,Custom Controls,有一个名为PhoneTextBox2的自定义asp.net控件。它使用ext.net库,但我不在乎 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PhoneTextBox2.ascx.cs" Inherits="Loginet.Web.Controls.PhoneTextBox2" %> <script type="text/javascript"> va

有一个名为PhoneTextBox2的自定义asp.net控件。它使用ext.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>
{txtb}u getNumber是javascript函数的唯一名称,{txtb}-是PhoneTextBox2的唯一名称

我怎样才能按点调用getNumber

更新:

    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的特性,我不能使用服务器端属性号。因此,我需要使用javascript获取数字。

处理程序指向.NET自定义方法/委托,它们的名称中不能有句号

可以扩展任何对象类型,例如:

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

'txtElement'.getNumber();
因此,您可以将代码更改为

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

无需为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");

Handler指向一个自定义javascript函数或standart ext.net javascript函数。必须有一些代码,我不明白为什么会有哈希符号…:-/{txtb}在ext.net中使用。这与我可以扩展PhoneTextBox2相同吗?它类似于PhoneTextBox2.prototype.getNumber=函数{alert'here:'+this;};扩展原型时,您只需将代码放置一次,通常放在名为plugin.js的javascript文件中,该文件在母版页中调用。我可以看出你不知道我的代码是做什么的。。。除非你能找到控制源代码,否则我帮不了你什么忙。
if (!Page.ClientScript.IsClientScriptBlockRegistered("getNumberScript"))
    Page.ClientScript.RegisterClientScriptBlock(GetType(), "getNumberScript", "getNumber = function () { return alert( 'some value'); }", true);
if (!Page.ClientScript.IsClientScriptIncludeRegistered("getNumberScript"))
    Page.ClientScript.RegisterClientScriptInclude("getNumberScript", "getNumberScript.js");