继上一篇《简单的自定义控件》http://blog.csdn.net/joyhen/article/details/8294951
今天我们来改进一下。还是原来的例子,照着修改,Render渲染输出的html
- protected string NewUserLoginControl()
- {
- StringBuilder strb = new StringBuilder("");
- strb.Append("<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/" + "/www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ");
- strb.Append("<html xmlns="http:/" + "/www.w3.org/1999/xhtml" > ");
- strb.Append("<head runat="server"> ");
- strb.Append(" <title>管理员登录登录</title> ");
- strb.Append(" <link href="style/login/base.css" rel="stylesheet" type="text/css" /> ");
- strb.Append(" <link href="style/login/style.css" rel="stylesheet" type="text/css" /> ");
- strb.Append(" <style type="text/css" id="overridestyle"> ");
- strb.Append(" body{ background-color:#F2F9FD;}/*#ddd*/#box .block h2{ background-color:#2275b3;}/*#C66653,#646464*/ ");
- strb.Append(" .text_field{ height:30px; line-height:30px; padding-left:5px;} .left{ line-height:30px;} ");
- strb.Append(" </style> ");
- strb.Append(" <!--[if lte IE 6]> ");
- strb.Append(" <script src="js/DD_belatedPNG_0.0.8a.js" type="text/javascript"></script> ");
- strb.Append(" <script type="text/javascript">DD_belatedPNG.fix('.button img');</script> ");
- strb.Append(" <style type="text/css">.block{border:1px solid #DEEFFA}</style> ");
- strb.Append(" <![endif]--> ");
- strb.Append(" <!--[if lte IE 8]> ");
- strb.Append(" <style type="text/css">.block{border:1px solid #92b2d5}</style> ");
- strb.Append(" <![endif]--> ");
- strb.Append("</head> ");
- strb.Append("<body><%--onkeydown="onEnterDown();"--%> ");
- strb.Append(" <div id="box"> <div style="height:129px;"></div> ");
- strb.Append(" <div class="block" id="block-login"> <h2>管理员登录</h2> ");
- strb.Append(" <div class="content login"> <div class="flash"> ");
- strb.Append(" <div class="message notice"><p> 请输入正确的用户名和密码</p></div> ");
- strb.Append(" </div> <form id="form1" class="form login" action="###"> ");
- strb.Append(" <div class="group wat-cf"> ");
- strb.Append(" <div class="left"><label class="label right">" + Lbl_UserName + "</label></div> ");
- strb.Append(" <div class="right"><input type="text" class="text_field"/></div> ");
- strb.Append(" </div> <div class="group wat-cf"> ");
- strb.Append(" <div class="left"><label class="label right">" + Lbl_UserPwd + "</label></div> ");
- strb.Append(" <div class="right"><input type="password" class="text_field"/></div> ");
- strb.Append(" </div> <div class="group navform wat-cf"><div class="right"> ");
- strb.Append(" <button class="button"><%--onclick="submit_login();"--%><img src="images/key.png" alt="保存" />登录</button> ");
- strb.Append(" </div> </div> </form> </div> </div> </div> ");
- strb.Append(" <%--<script src="js/jquery-1.7.2.min.js" type="text/javascript"></script> ");
- strb.Append(" <script src="js/js_login.js" type="text/javascript"></script> ");
- strb.Append(" <script type="text/javascript"> $(function() {$("input[type=text]").focus();}) ");
- strb.Append(" function onEnterDown() {if (window.event.keyCode == 13) {submit_login();}} </script>--%> ");
- strb.Append("</body> </html>");
- return strb.ToString();
- }
protected string NewUserLoginControl() { StringBuilder strb = new StringBuilder(""); strb.Append("<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/" + "/www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "); strb.Append("<html xmlns="http:/" + "/www.w3.org/1999/xhtml" > "); strb.Append("<head runat="server"> "); strb.Append(" <title>管理员登录登录</title> "); strb.Append(" <link href="style/login/base.css" rel="stylesheet" type="text/css" /> "); strb.Append(" <link href="style/login/style.css" rel="stylesheet" type="text/css" /> "); strb.Append(" <style type="text/css" id="overridestyle"> "); strb.Append(" body{ background-color:#F2F9FD;}/*#ddd*/#box .block h2{ background-color:#2275b3;}/*#C66653,#646464*/ "); strb.Append(" .text_field{ height:30px; line-height:30px; padding-left:5px;} .left{ line-height:30px;} "); strb.Append(" </style> "); strb.Append(" <!--[if lte IE 6]> "); strb.Append(" <script src="js/DD_belatedPNG_0.0.8a.js" type="text/javascript"></script> "); strb.Append(" <script type="text/javascript">DD_belatedPNG.fix('.button img');</script> "); strb.Append(" <style type="text/css">.block{border:1px solid #DEEFFA}</style> "); strb.Append(" <![endif]--> "); strb.Append(" <!--[if lte IE 8]> "); strb.Append(" <style type="text/css">.block{border:1px solid #92b2d5}</style> "); strb.Append(" <![endif]--> "); strb.Append("</head> "); strb.Append("<body><%--onkeydown="onEnterDown();"--%> "); strb.Append(" <div id="box"> <div style="height:129px;"></div> "); strb.Append(" <div class="block" id="block-login"> <h2>管理员登录</h2> "); strb.Append(" <div class="content login"> <div class="flash"> "); strb.Append(" <div class="message notice"><p> 请输入正确的用户名和密码</p></div> "); strb.Append(" </div> <form id="form1" class="form login" action="###"> "); strb.Append(" <div class="group wat-cf"> "); strb.Append(" <div class="left"><label class="label right">" + Lbl_UserName + "</label></div> "); strb.Append(" <div class="right"><input type="text" class="text_field"/></div> "); strb.Append(" </div> <div class="group wat-cf"> "); strb.Append(" <div class="left"><label class="label right">" + Lbl_UserPwd + "</label></div> "); strb.Append(" <div class="right"><input type="password" class="text_field"/></div> "); strb.Append(" </div> <div class="group navform wat-cf"><div class="right"> "); strb.Append(" <button class="button"><%--onclick="submit_login();"--%><img src="images/key.png" alt="保存" />登录</button> "); strb.Append(" </div> </div> </form> </div> </div> </div> "); strb.Append(" <%--<script src="js/jquery-1.7.2.min.js" type="text/javascript"></script> "); strb.Append(" <script src="js/js_login.js" type="text/javascript"></script> "); strb.Append(" <script type="text/javascript"> $(function() {$("input[type=text]").focus();}) "); strb.Append(" function onEnterDown() {if (window.event.keyCode == 13) {submit_login();}} </script>--%> "); strb.Append("</body> </html>"); return strb.ToString(); }
上面有2个参数,是文本框的标题,所有我们要写2个属性
- private string lbl_userName = "用户名:";
- [System.ComponentModel.Browsable(true)]//在属性窗口中是否可见
- [System.ComponentModel.Category("Appearance")]//属性的分类,如,行为,外观,大家可以在属性窗口看见这样的分类
- [System.ComponentModel.DefaultValue("用户名:")]
- [System.ComponentModel.Description("用户名:")]//这些是显示在属性窗口底下的
- public virtual string Lbl_UserName
- {
- get { return lbl_userName; }
- set { lbl_userName = value; }
- }
- private string lbl_userPwd = "密 码:";
- [System.ComponentModel.Browsable(true)]
- [System.ComponentModel.Category("Appearance")]
- [System.ComponentModel.DefaultValue("密 码:")]
- [System.ComponentModel.Description("密 码:")]
- public virtual string Lbl_UserPwd
- {
- get { return lbl_userPwd; }
- set { lbl_userPwd = value; }
- }
private string lbl_userName = "用户名:"; [System.ComponentModel.Browsable(true)]//在属性窗口中是否可见 [System.ComponentModel.Category("Appearance")]//属性的分类,如,行为,外观,大家可以在属性窗口看见这样的分类 [System.ComponentModel.DefaultValue("用户名:")] [System.ComponentModel.Description("用户名:")]//这些是显示在属性窗口底下的 public virtual string Lbl_UserName { get { return lbl_userName; } set { lbl_userName = value; } } private string lbl_userPwd = "密 码:"; [System.ComponentModel.Browsable(true)] [System.ComponentModel.Category("Appearance")] [System.ComponentModel.DefaultValue("密 码:")] [System.ComponentModel.Description("密 码:")] public virtual string Lbl_UserPwd { get { return lbl_userPwd; } set { lbl_userPwd = value; } }
然后我们重写的Render部分这样
- protected override void Render(System.Web.UI.HtmlTextWriter writer)
- {
- writer.Write(NewUserLoginControl());
- base.Render(writer);
- }
protected override void Render(System.Web.UI.HtmlTextWriter writer) { writer.Write(NewUserLoginControl()); base.Render(writer); }
好了,重写生成一下CustomerWebControls这个类,然后把web层清理下,重新生成,这时我们把左侧控件箱里的userlogin拖到页面(假如页面是RenderLoginControl.aspx)上
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RenderLoginControl.aspx.cs" Inherits="MyWebSiteTest.admin.RenderLoginControl" %>
- <%@ Register Assembly="CustomerWebControls" Namespace="CustomerWebControls" TagPrefix="cc1" %>
- <cc1:userlogin runat='server'></cc1:userlogin>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RenderLoginControl.aspx.cs" Inherits="MyWebSiteTest.admin.RenderLoginControl" %> <%@ Register Assembly="CustomerWebControls" Namespace="CustomerWebControls" TagPrefix="cc1" %> <cc1:userlogin runat='server'></cc1:userlogin>
再去看看属性窗口
这就出来效果了。上面其实都是大段的html,根本说不上是用户控件。但是这是个思路,下一篇我们把html全部去掉,只留下基本骨架,也就是2个输入框+2个输入框标题 + 一个按钮,然后我们添加更具体的属性和事件。等待出炉吧