1.组件源文件 IPostTest.cs
1using System;
2using System.Web.UI;
3using System.Web.UI.WebControls;
4using System.ComponentModel;
5
6namespace MyWebControl
7{
8 ///
1<summary>
2 9 /// IPostTest 的摘要说明。
3 10 /// </summary>
11 [DefaultProperty("Text"), 12 ToolboxData("<{0}:IPostTest runat=server>
")] 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 ///
1<summary>
2 53 /// 将此控件呈现给指定的输出参数。
3 54 /// </summary>
55 ///
1<param name="output"/>
要写出到的 HTML 编写器 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控件了解不多,一步步学,不知道大家有没有遇到过我这样的问题。
希望高手能够指点一下感激不尽!