Asp.net自定义控件和javascript函数
有一个名为PhoneTextBox2的自定义asp.net控件。它使用ext.net库,但我不在乎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
<%@ 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");