web组件设计,利用接口(IPostBackDataHandler)产生数据回传的问题
点击次数:15 次 发布日期:2008-11-26 23:43:21 作者:源代码网
|
源代码网推荐 源代码网推荐1using System; 源代码网推荐2using System.Web.UI; 源代码网推荐3using System.Web.UI.WebControls; 源代码网推荐4using System.ComponentModel; 源代码网推荐5 源代码网推荐6namespace MyWebControl 源代码网推荐7{ 源代码网推荐8 /// <summary> 源代码网推荐9 /// IPostTest 的摘要说明。 源代码网推荐10 /// </summary> 源代码网推荐11 [DefaultProperty("Text"), 源代码网推荐12 ToolboxData("<{0}:IPostTest runat=server></{0}:IPostTest>")] 源代码网推荐13 public class IPostTest : System.Web.UI.WebControls.WebControl,IPostBackDataHandler 源代码网推荐14 { 源代码网推荐15 private string user; 源代码网推荐16 private string pwd; 源代码网推荐17 源代码网推荐18 // 控件名称设置 源代码网推荐19 private string UserName 源代码网推荐20 { 源代码网推荐21 get 源代码网推荐22 { 源代码网推荐23 return this.UniqueID + ":user"; 源代码网推荐24 } 源代码网推荐25 } 源代码网推荐26 源代码网推荐27 private string PwdName 源代码网推荐28 { 源代码网推荐29 get 源代码网推荐30 { 源代码网推荐31 return this.UniqueID + ":pwd"; 源代码网推荐32 } 源代码网推荐33 } 源代码网推荐34 源代码网推荐35 // 公共属性 源代码网推荐36 public string UserValue 源代码网推荐37 { 源代码网推荐38 get 源代码网推荐39 { 源代码网推荐40 return user; 源代码网推荐41 } 源代码网推荐42 } 源代码网推荐43 源代码网推荐44 public string PwdValue 源代码网推荐45 { 源代码网推荐46 get 源代码网推荐47 { 源代码网推荐48 return pwd; 源代码网推荐49 } 源代码网推荐50 } 源代码网推荐51 源代码网推荐52 /// <summary> 源代码网推荐53 /// 将此控件呈现给指定的输出参数。 源代码网推荐54 /// </summary> 源代码网推荐55 /// <param name="output"> 要写出到的 HTML 编写器 </param> 源代码网推荐56 protected override void Render(HtmlTextWriter output) 源代码网推荐57 { 源代码网推荐58 //output.AddAttribute(HtmlTextWriterAttribute.Name,this.UniqueID); 源代码网推荐59 output.RenderBeginTag(HtmlTextWriterTag.Table); 源代码网推荐60 output.RenderBeginTag(HtmlTextWriterTag.Tr); 源代码网推荐61 output.RenderBeginTag(HtmlTextWriterTag.Td); 源代码网推荐62 源代码网推荐63 output.AddAttribute(HtmlTextWriterAttribute.Name,UserName); 源代码网推荐64 output.AddAttribute(HtmlTextWriterAttribute.Value,((user == null)?String.Empty:user)); 源代码网推荐65 output.AddAttribute(HtmlTextWriterAttribute.Type,"text"); 源代码网推荐66 output.RenderBeginTag(HtmlTextWriterTag.Input); 源代码网推荐67 output.RenderEndTag();//input 源代码网推荐68 源代码网推荐69 output.AddAttribute(HtmlTextWriterAttribute.Name,this.UniqueID); 源代码网推荐70 output.AddAttribute(HtmlTextWriterAttribute.Type,"hidden"); 源代码网推荐71 output.AddAttribute(HtmlTextWriterAttribute.Value,"dd"); 源代码网推荐72 output.RenderBeginTag(HtmlTextWriterTag.Input); 源代码网推荐73 output.RenderEndTag();//input hidden 源代码网推荐74 源代码网推荐75 output.RenderBeginTag(HtmlTextWriterTag.Br); 源代码网推荐76 output.RenderEndTag();//br 源代码网推荐77 源代码网推荐78 output.AddAttribute(HtmlTextWriterAttribute.Name,PwdName); 源代码网推荐79 output.AddAttribute(HtmlTextWriterAttribute.Value,((pwd == null)?String.Empty:pwd)); 源代码网推荐80 output.AddAttribute(HtmlTextWriterAttribute.Type,"text"); 源代码网推荐81 output.RenderBeginTag(HtmlTextWriterTag.Input); 源代码网推荐82 output.RenderEndTag();//input 源代码网推荐83 源代码网推荐84 output.RenderEndTag();//td 源代码网推荐85 output.RenderEndTag();//tr 源代码网推荐86 output.RenderEndTag();//table 源代码网推荐87 } 源代码网推荐88 // IPostBackDataHandler 成员 源代码网推荐89 源代码网推荐90 void IPostBackDataHandler.RaisePostDataChangedEvent() 源代码网推荐91 { 源代码网推荐92 // TODO: 添加 IPostTest.RaisePostDataChangedEvent 实现 源代码网推荐93 } 源代码网推荐94 源代码网推荐95 bool IPostBackDataHandler.LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection values) 源代码网推荐96 { 源代码网推荐97 // TODO: 添加 IPostTest.LoadPostData 实现 源代码网推荐98 user = values[UserName]; 源代码网推荐99 pwd = values[PwdName]; 源代码网推荐100 return false; 源代码网推荐101 } 源代码网推荐102 源代码网推荐103 } 源代码网推荐104} 源代码网推荐105 源代码网推荐2.测试方法 将组件编译后添加入自定义控件工具栏,拖入到测试页面,增加一button按钮控件,3.得出结论 当组件内部存在多个input子控件时,必须有一个子控件的 name 为 this.UniqueID,这样才能取得其他子控件的值回传。 a.当我试着将this.UniqueID加载到table上时,却取不到其子控件input的值。 b.上面的类型为hidden的input,可以取消,但必须将this.UniqueID加载到另外的任意一个控件上,否则取不到其值。 我这么加一个hidden类型的input,纯粹只是为了对应而已,没什么其他目的。 c.我实在对web控件了解不多,一步步学,不知道大家有没有遇到过我这样的问题。希望高手能够指点一下感激不尽! 源代码网供稿. |
