關于webcontrol和pagelet的一點看法
2024-07-21 02:16:39
供稿:網友
昨天看了bigeagle的一些帖子,覺得受益匪淺,但有一點我不是很同意,就是說pagelet是一個過渡性方案,其實在一些簡單的控件開發上,pagelet是很方便的。
而且pagelet有直觀明了的特點。pagelet 可與webform一樣支持控件拖放。這極大方便了我們的編程。我個人認為簡單的無需支持模版的空件完全可以用pagelet來開發。它與webcontrol是同等的。當然如果要做一個商業化的復雜的(比如你想自己做一個類似datagrid的控件)還是要用webcontrol的。這里就兩個例子來說明
我們分別用這兩種方式開發一個用戶登錄控件
1._signin.ascx
<%@ control inherits="portal.portalmodulecontrol" %>
<%@ import namespace="portal" %>
<script language="c#" runat="server">
void loginbtn_click(object sender, imageclickeventargs e) {
// attempt to validate user credentials using usersdb
usersdb accountsystem = new usersdb();
string userid = accountsystem.login(email.text, password.text);
if ((userid != null) && (userid != "")) {
// use security system to set the userid within a client-side cookie
cookieauthentication.setauthcookie(userid, remembercheckbox.checked);
// redirect browser back to originating page
response.redirect("default.aspx");
}
else {
message.text = "<" + "br" + "><" + "br" + ">登錄失敗!<" + "br" + "><" + "br>";
}
}
</script>
<hr noshade size="1pt" width="98%">
<span class="subsubhead" style="height:20">account login</span>
<br>
<span class="normal">email:</span><br>
<asp:textbox id="email" columns="9" width="130" cssclass="normaltextbox" runat="server"/><br>
<span class="normal">password:</span><br>
<asp:textbox id="password" columns="9" width="130" textmode="password" cssclass="normaltextbox" runat="server"/><br>
<asp:checkbox id="remembercheckbox" class="normal" text="remember login" runat=server/>
<table cellspacing=0 cellpadding=4 border=0>
<tr>
<td>
<asp:imagebutton id=signinbtn imageurl="images/signin.gif" onclick="loginbtn_click" runat="server" /><br>
<a href="register.aspx"><img src=http://www.163design.net/n/a/"images/register.gif" border="0"></a></br>
<asp:label id="message" class="normalred" runat=server/>
</td>
</tr>
</table>
<br>
////
////2.webcontrol
///
using system;
using system.drawing;
using system.web;
using system.web.ui;
using system.web.ui.webcontrols;
using system.componentmodel;
using system.web.sessionstate;
using system.web.security;
using portal;
namespace portal.web
{
/// <summary>
/// summary description for login.
/// </summary>
[defaultproperty("text"),
showintoolbox(true),
toolboxdata("<{0}:login runat=server></{0}:login>")]
public class login : control, inamingcontainer
{
private string text;
protected textbox txtusername;
protected textbox txtpassword;
protected label lblusername;
protected label lblpassword;
protected requiredfieldvalidator rvusername;
protected requiredfieldvalidator rvpassword;
protected linkbutton btnlogin;
protected linkbutton btnregister;
protected label errmsg;
protected checkbox remembercheckbox;
[bindable(true),
category("appearance"),
defaultvalue(""),
persistable(persistablesupport.declarative)]
public string text
{
get
{
return text;
}
set
{
text = value;
}
}
/// <summary>
/// render this control to the output parameter specified.
/// </summary>
/// <param name="output"> the html writer to write out to </param>
protected override void createchildcontrols()
{
this.controls.add(new literalcontrol("<table>"));
this.controls.add(new literalcontrol("<tr>"));
this.controls.add(new literalcontrol("<td>"));
lblusername = new label();
lblusername.text = "用戶名";
this.controls.add(lblusername);
this.controls.add(new literalcontrol("</td>"));
this.controls.add(new literalcontrol("<td>"));
txtusername = new textbox();
txtusername.text = "";
this.controls.add(txtusername);
this.controls.add(new literalcontrol("</td>"));
this.controls.add(new literalcontrol("<td>"));
rvusername = new requiredfieldvalidator();
rvusername.controltovalidate = "txtusername";
rvusername.errormessage = "用戶名不能為空!";
rvusername.forecolor = system.drawing.color.red;
this.controls.add(rvusername);
this.controls.add(new literalcontrol("</td>"));
this.controls.add(new literalcontrol("</tr>"));
this.controls.add(new literalcontrol("<tr>"));
this.controls.add(new literalcontrol("<td>"));
lblpassword = new label();
lblpassword.text = "密碼";
this.controls.add(lblpassword);
this.controls.add(new literalcontrol("</td>"));
this.controls.add(new literalcontrol("<td>"));
txtpassword = new textbox();
txtpassword.textmode = system.web.ui.webcontrols.textboxmode.password;
txtpassword.text = "";
this.controls.add(txtpassword);
this.controls.add(new literalcontrol("</td>"));
this.controls.add(new literalcontrol("<td>"));
rvpassword = new requiredfieldvalidator();
rvpassword.controltovalidate = "txtpassword";
rvpassword.errormessage = "密碼不能為空!!";
rvpassword.forecolor = system.drawing.color.red;
this.controls.add(rvusername);
this.controls.add(new literalcontrol("</td>"));
this.controls.add(new literalcontrol("</tr>"));
this.controls.add(new literalcontrol("<tr colspan=3>"));
this.controls.add(new literalcontrol("<td>"));
remembercheckbox = new checkbox();
this.controls.add(remembercheckbox);
this.controls.add(new literalcontrol("</td>"));
this.controls.add(new literalcontrol("</tr>"));
this.controls.add(new literalcontrol("<tr colspan=3>"));
this.controls.add(new literalcontrol("<td>"));
btnlogin = new linkbutton();
btnlogin.text = "登錄";
btnlogin.click += new eventhandler(this.btnlogin_click);
this.controls.add(btnlogin);
this.controls.add(new literalcontrol(" "));
btnregister = new linkbutton();
btnregister.text = "注冊";
btnregister.click += new eventhandler(this.btnregister_click);
this.controls.add(btnlogin);
this.controls.add(new literalcontrol("</td>"));
this.controls.add(new literalcontrol("</tr>"));
this.controls.add(new literalcontrol("<tr colspan=3>"));
this.controls.add(new literalcontrol("<td>"));
errmsg = new label();
errmsg.id = "errmsg";
this.controls.add(errmsg);
this.controls.add(new literalcontrol("</td>"));
this.controls.add(new literalcontrol("</tr>"));
this.controls.add(new literalcontrol("</table>"));
}
private void btnlogin_click(object sender, eventargs e)
{
usersdb accountsystem = new usersdb();
string userid = accountsystem.login(txtusername.text, txtpassword.text);
if ((userid != null) && (userid != "")) {
// use security system to set the userid within a client-side cookie
cookieauthentication.setauthcookie(userid, remembercheckbox.checked);
// redirect browser back to originating page
page.response.redirect("default.aspx");
}
else {
errmsg.text = "<" + "br" + "><" + "br" + ">登錄失敗!<" + "br" + "><" + "br>";
}
}
private void btnregister_click(object sender, eventargs e)
{
page.response.redirect("register.aspx");
}
}
}