为<input type =“email”/>创建服务器控件

时间:2015-04-15 04:41:39

标签: asp.net controls server

我正在使用Visual Studio 2008.(我有Visual Studio 2013,但我发现它太难用了)....所以我没有任何新的HTML5控件环境。

我想创建一个自定义服务器控件来生成此输出:

<input type="email">

我创建了这个类:

public class TextBoxEmail : System.Web.UI.HtmlControls.HtmlInputText
    {
        protected override void RenderAttributes(HtmlTextWriter writer)
        {
            writer.WriteAttribute("type", "email");
            base.Attributes.Remove("type");

            base.RenderAttributes(writer);
        }

    }

但问题是这产生了这个输出:

<input type="email" type="text">

我的问题是: 如何摆脱额外的type="text

实际上,我更愿意继承System.Web.UI.WebControls.TextBox的{​​{1}} INSTEAD,但我不知道如何做到这一点。

我有整个网站的viewstate禁用,所以我根本不使用它...我从不使用它。

我知道我可能继承自System.Web.UI.HtmlControls.HtmlInputText,它在其构造函数中将“type”作为参数,但我无法弄清楚如何去做。此外,我需要System.Web.UI.HtmlControls.HtmlInputControl内的所有功能,预先填充PostBack上的文本框....我试图找出所有这些,但不能这样做。如果可以的话,我会从头开始构建这个控件。

关于创建服务器控件的信息并不多。就好像这个服务器控制制造的东西从来没有真正起飞那么多。

请指教。 感谢

1 个答案:

答案 0 :(得分:0)

对于这个特定用例,我不建议您创建一个服务器控件,您可以使用普通TextBox并修改type属性。

<asp:TextBox runat="server" ID="txtMail"/>

背后的代码

protected void Page_Load(object sender, EventArgs e)
{
   txtMail.Attributes["type"] = "email";
}