C# 如何在自定义控件中创建转换为模板的功能
我已经为电子邮件创建了自定义控件,其中包含textbox和expression validator。我还将类库项目dll添加到工具箱中 当我拖放控件时,我的控件也可以工作。如果我拖放控件并编写我自己的标记,那么它也可以工作,但不是编写标记,我希望当我转到aspx页面的设计并选择我的控件时,在智能标记中,我应该获得转换为模板的选项,当我单击我在控件中提供的默认标记应该是render。有人能帮我实现这一点吗 我的模板代码是C# 如何在自定义控件中创建转换为模板的功能,c#,asp.net,C#,Asp.net,我已经为电子邮件创建了自定义控件,其中包含textbox和expression validator。我还将类库项目dll添加到工具箱中 当我拖放控件时,我的控件也可以工作。如果我拖放控件并编写我自己的标记,那么它也可以工作,但不是编写标记,我希望当我转到aspx页面的设计并选择我的控件时,在智能标记中,我应该获得转换为模板的选项,当我单击我在控件中提供的默认标记应该是render。有人能帮我实现这一点吗 我的模板代码是 using System; using System.ComponentMo
using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CustomControl
{
[ParseChildren(ChildrenAsProperties = true)]
[ValidationPropertyAttribute("Text")]
public class Email : CompositeControl, INamingContainer
{
/// <summary>
/// declaration of variable of type ITemplate
/// </summary>
private ITemplate layoutTemplate;
private Control myLayoutTemplateContainer;
/// <summary>
/// Property which is used as tag for specify the markup in control
/// </summary>
[Browsable(true),
DefaultValue(null),
Description("The layout template."),
TemplateContainer(typeof(EmailTemplateContainer)),
PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate LayoutTemplate
{
get
{
return layoutTemplate;
}
set
{
layoutTemplate = value;
}
}
/// <summary>
/// This textbox is used for enter emailid
/// </summary>
private TextBox emailTextbox;
/// <summary>
/// Regular expression validator
/// </summary>
private RegularExpressionValidator emailValidationExpression;
/// <summary>
/// This property contains maxlength of textbox
/// </summary>
private int maxLength;
public int MaxLength
{
get
{
return maxLength;
}
set
{
maxLength = value;
}
}
/// <summary>
/// This property contains Validation group for textbox control
/// </summary>
private string validationGroup;
public string ValidationGroup
{
get
{
return validationGroup;
}
set
{
validationGroup = value;
}
}
/// <summary>
/// Control container for Layout template
/// </summary>
public Control MyLayoutTemplateContainer
{
get
{
return myLayoutTemplateContainer;
}
}
protected override void CreateChildControls()
{
// If markup for control is given then if block will execute otherwise else block will execute which is default
if (LayoutTemplate != null)
{
myLayoutTemplateContainer = new EmailTemplateContainer(this);
LayoutTemplate.InstantiateIn(myLayoutTemplateContainer);
Controls.Add(myLayoutTemplateContainer);
}
else
{
/// <summary>
/// This is default markup for control if markup to the control is not given then this block will execute
/// </summary>
//Assigning properties to textbox
this.emailTextbox = new TextBox();
this.emailTextbox.ID = "EmailTextbox";
emailTextbox.MaxLength = this.MaxLength;
this.Controls.Add(emailTextbox);
// Email regular expression validators properties
this.emailValidationExpression = new RegularExpressionValidator();
emailValidationExpression.ValidationGroup = this.ValidationGroup;
emailValidationExpression.ControlToValidate = emailTextbox.ID;
emailValidationExpression.Display = ValidatorDisplay.Dynamic;
emailValidationExpression.Attributes.CssStyle.Add("color", "red");
emailValidationExpression.ValidationExpression = Constant.EMAIL_REGULAR_EXPRESSION;
emailValidationExpression.ErrorMessage = Resource.WrongEmailMessage;
this.Controls.Add(emailValidationExpression);
}
}
protected override void Render(HtmlTextWriter writer)
{
if (emailTextbox != null)
{
emailTextbox.RenderControl(writer);
emailValidationExpression.RenderControl(writer);
}
if (myLayoutTemplateContainer != null)
{
myLayoutTemplateContainer.RenderControl(writer);
}
}
}
public class EmailTemplateContainer : Control, INamingContainer
{
private Email parent;
public EmailTemplateContainer(Email parent)
{
this.parent = parent;
}
public string ValidationGroup
{
get
{
return parent.ValidationGroup;
}
}
public int MaxLength
{
get
{
return parent.MaxLength;
}
}
}
使用系统;
使用系统组件模型;
使用System.Web.UI;
使用System.Web.UI.WebControl;
命名空间自定义控件
{
[解析子对象(ChildrenAsProperties=true)]
[验证属性属性(“文本”)]
公共类电子邮件:CompositeControl,INamingContainer
{
///
///ITemplate类型变量的声明
///
私有项目板布局模板;
私有控制myLayoutTemplateContainer;
///
///属性,该属性用作控件中指定标记的标记
///
[可浏览(正确),
默认值(null),
说明(“布局模板”),
TemplateContainer(类型为(EmailTemplateContainer)),
PersistenceMode(PersistenceMode.InnerProperty)]
公共项目板布局模板
{
得到
{
返回模板;
}
设置
{
layoutTemplate=值;
}
}
///
///此文本框用于输入emailid
///
私人文本框emailTextbox;
///
///正则表达式验证器
///
private RegularExpressionValidator emailValidationExpression;
///
///此属性包含textbox的maxlength
///
私有整数最大长度;
公共整数最大长度
{
得到
{
返回最大长度;
}
设置
{
maxLength=值;
}
}
///
///此属性包含textbox控件的验证组
///
私有字符串验证组;
公共字符串验证组
{
得到
{
返回验证组;
}
设置
{
validationGroup=值;
}
}
///
///布局模板的控件容器
///
公共控件MyLayoutTemplateContainer
{
得到
{
返回myLayoutTemplateContainer;
}
}
受保护的覆盖无效CreateChildControls()
{
//若给出了控件的标记,那个么If块将执行,否则else块将执行,这是默认值
如果(LayoutTemplate!=null)
{
myLayoutTemplateContainer=新的EmailTemplateContainer(此);
LayoutTemplate.InstanceIn(myLayoutTemplateContainer);
添加(myLayoutTemplateContainer);
}
其他的
{
///
///这是控件的默认标记。如果未给出控件的标记,则将执行此块
///
//为文本框指定属性
this.emailTextbox=新文本框();
this.emailTextbox.ID=“emailTextbox”;
emailTextbox.MaxLength=此.MaxLength;
this.Controls.Add(emailTextbox);
//电子邮件正则表达式验证程序属性
this.emailValidationExpression=新的RegularExpressionValidator();
emailValidationExpression.ValidationGroup=this.ValidationGroup;
emailValidationExpression.ControlToValidate=emailTextbox.ID;
emailValidationExpression.Display=validationDisplay.Dynamic;
emailValidationExpression.Attributes.csssstyle.Add(“颜色”、“红色”);
emailValidationExpression.ValidationExpression=Constant.EMAIL\u正则表达式;
emailValidationExpression.ErrorMessage=Resource.ErrorEmailMessage;
this.Controls.Add(emailValidationExpression);
}
}
受保护的覆盖无效渲染(HtmlTextWriter编写器)
{
如果(emailTextbox!=null)
{
emailTextbox.RenderControl(编写器);
emailValidationExpression.RenderControl(编写器);
}
if(myLayoutTemplateContainer!=null)
{
myLayoutTemplateContainer.RenderControl(编写器);
}
}
}
公共类EmailTemplateContainer:控件,InAdminContainer
{
私人电子邮件家长;
公共EmailTemplateContainer(电子邮件父级)
{
this.parent=parent;
}
公共字符串验证组
{
得到
{
返回parent.ValidationGroup;
}
}
公共整数最大长度
{
得到
{
返回parent.MaxLength;
}
}
}
}