之前谈过用 UIHint 使用不同的模板,现在介绍另一种方法。
比如我们现在在做一个 Password 框,我们可以另外做一个控件来实现 Password 框,但我们发现 Password 框实际上是 Text 的一种,为什么不将就 Text_Edit.ascx,只改一下 TextMode 来实现呢。
首先用分部类,将 DataType 设置为 Password。
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace DynamicData
{
[MetadataType(typeof(CompaniesMetaData))]
public partial class Companies
{
}
public class CompaniesMetaData
{
[DataType(DataType.Password)]
public object Password { get; set; }
}
}
然后在 Text_Edit.ascx,给 TextBox1 增加 DataBinding。
using System.ComponentModel.DataAnnotations;
protected void TextBox1_DataBinding(object sender, EventArgs e)
{
var metadata = MetadataAttributes.OfType<DataTypeAttribute>().FirstOrDefault();
if (metadata.DataType == System.ComponentModel.DataAnnotations.DataType.Password)
{
TextBox1.TextMode = TextBoxMode.Password;
}
}