懂asp.net3.5控件开发的牛人进!·

wosizy 2009-09-12 11:34:27
小弟最近正在看郑键兄写的 《asp.net3.5控件和组件开发技术》一书。才看到前面4张不到
目前参照本书的邮件验证控件 处于自己的想法,想修改一下这控件 可能小弟不才(或还没将此书看完) 不知道能不能实现

想把这个邮件验证控件的错误提示信息 改成光标离开此控件时判断如果填写的邮件格式错误则弹出JS提示输入格式错误。
请大家帮下忙
(之前此控件是点击按钮才能触发验证事件,而且提示的也是在文本框后面单独占一个TD列来显示提示信息)

本书代码--
/// <summary>
/// 建立子控件实例, 并设置默认值
/// </summary>
protected override void CreateChildControls()
{
//base.CreateChildControls();
this.Controls.Clear();//防止重复增加相同的子控件

daktext = new TextBox();
this.daktext.ID = "DakValue";//控件ID
this.daktext.Width = Unit.Pixel(100);//控件宽度
this.Controls.Add(daktext);//添加控件

dakrev = new RegularExpressionValidator();//验证表达式
this.dakrev.ID = "DakrevValue";
this.dakrev.ErrorMessage = "(<script>alert('输入格式错误!')</script>)";//验证失败时控件中显示的错误文本(这行我改过--源码是 this.dakrev.ErrorMessage = "[输入格式错误]";)
this.dakrev.Display = ValidatorDisplay.Static;//错误信息的显示内容
this.Controls.Add(dakrev);

this.ChildControlsCreated = true;//创建服务器控件(true)
}

/// 呈现
/// </summary>
/// <param name="writer">输出格式</param>
protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
//表格table标记开始
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.daktext.RenderControl(writer);
writer.RenderEndTag();//td标记结束
//当用户设置正则表达式的值时,则显示两列
if (String.IsNullOrEmpty(this.DakValidateExpression) == false && this.DesignMode == false)
{
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.dakrev.RenderControl(writer);
writer.RenderEndTag();
}
writer.RenderEndTag();
writer.RenderEndTag();
return;
}

...全文
164 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序漫步 2009-09-13
  • 打赏
  • 举报
回复
楼主 这要设计事件了

楼主参考下

是庖丁解牛 的一个例子

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Matter
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:postBack runat=server></{0}:postBack>")]
public class postBack : WebControl
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? String.Empty : s);
}

set
{
ViewState["Text"] = value;
}
}

protected override void RenderContents(HtmlTextWriter output)
{
output.Write("<INPUT type=button name=\"{0}\" value='[使用Page.ClientScript对象方法]' onclick=\"{1}\">", this.UniqueID, Page.ClientScript.GetPostBackEventReference(this, ""));
}


private bool auriPostBack = false;

[Description("是否回发")]
public bool AutoPostBack
{
get
{
return auriPostBack;
}
set
{
auriPostBack = value;
}
}

protected override void OnPreRender(EventArgs e)
{
PostBackOptions pbo = new PostBackOptions(this);
pbo.AutoPostBack =this.AutoPostBack;
pbo.PerformValidation = true; //回发是否在客户端验证
pbo.TrackFocus = true;//在执行完回发后使文本框重新获取焦点
pbo.ClientSubmit = true;
pbo.RequiresJavaScriptProtocol = false;
string str = this.Page.ClientScript.GetPostBackEventReference(pbo);
StringBuilder strPostbackFromClient = new StringBuilder();


strPostbackFromClient.Append("function PostBackFromClient_" + this.ClientID + "()");
strPostbackFromClient.Append("{");
strPostbackFromClient.Append(str + ";");

strPostbackFromClient.Append("}");

if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "PostBackFromClient_" + this.ClientID)) // 判断是否已经是否,输出过 就不在输出
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "PostBackFromClient_" + this.ClientID, strPostbackFromClient.ToString(), true);
}

base.OnPreRender(e);
}



protected override void Render(HtmlTextWriter writer)
{

// writer.Write("<INPUT type=button name=\"{0}\" value=\'{1}\' onblur=\'{2}\'>", this.UniqueID, HttpUtility.HtmlEncode(Text), "PostBackFromClient_"+this.ClientID);

writer.Write("<input type=\"text\" name=\"{0}\" value=\"{1}\" onblur=\"{2}\"", this.ClientID, HttpUtility.HtmlEncode(Text), "PostBackFromClient_"+this.ClientID+"()");
}

protected event HandledEventHandler TextChange;

protected virtual void OnTextChange(EventArgs e)
{
if (TextChange != null)
{
TextChange(this, e);
}

}
}
}
zuoming120 2009-09-13
  • 打赏
  • 举报
回复
红街咖啡 2009-09-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ld1201 的回复:]
控件我基本很少使用也很少开发。
目前使用的是3.5,不过楼主要学开发控件就建议先学c#面向对象,因为这才是基础。
做web开发目前我是这样的:UI方面使用的是试图引擎框架(简单说就是模板),然后替换上面的内容。中间一个控件也没用到,完全走java和php的路。
我不是很喜欢MS的控件,因为把html代码放在类里,这样不是很合理,可测试性太差了。这样程序员就会去做美工的事,生成的页面代码的可读性也不高。
[/Quote]
学习了。
sniperhe 2009-09-13
  • 打赏
  • 举报
回复
这书我也买了,可是买来了,还没看过,惭愧啊~~
ld1201 2009-09-13
  • 打赏
  • 举报
回复
控件我基本很少使用也很少开发。
目前使用的是3.5,不过楼主要学开发控件就建议先学c#面向对象,因为这才是基础。
做web开发目前我是这样的:UI方面使用的是试图引擎框架(简单说就是模板),然后替换上面的内容。中间一个控件也没用到,完全走java和php的路。
我不是很喜欢MS的控件,因为把html代码放在类里,这样不是很合理,可测试性太差了。这样程序员就会去做美工的事,生成的页面代码的可读性也不高。
红街咖啡 2009-09-13
  • 打赏
  • 举报
回复
恩。帮顶一下吧。
wosizy 2009-09-13
  • 打赏
  • 举报
回复
昏 · 还没看到那来·
程序漫步 2009-09-13
  • 打赏
  • 举报
回复
讲事件的 是在第 五章
wosizy 2009-09-13
  • 打赏
  • 举报
回复
8楼 这段代码是第几张的? 我去参考下
Adechen 2009-09-13
  • 打赏
  • 举报
回复
友情帮顶,
听说这书评价还可以,
CopperBell 2009-09-12
  • 打赏
  • 举报
回复
友情up

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧