web组件设计,利用接口(IPostBackDataHandler)产生数据回传的问题

类别:.NET开发 点击:0 评论:0 推荐:

1.组件源文件 IPostTest.cs
function ToggleSourceCodeRegion(regionNumber) { var divRegion = document.getElementById('region' + regionNumber); var divRegionBlock = document.getElementById('regionBlock' + regionNumber); if (divRegion.style.display == 'inline') { divRegion.style.display = 'none'; divRegionBlock.style.display = 'inline'; } else { divRegion.style.display = 'inline'; divRegionBlock.style.display = 'none'; } }

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子控件时,必须有一个子控件的 namethis.UniqueID,这样才能取得其他子控件的值回传。
    a.当我试着将this.UniqueID加载到table上时,却取不到其子控件input的值。
    b.上面的类型为hidden的input,可以取消,但必须将this.UniqueID加载到另外的任意一个控件上,否则取不到其值。
      我这么加一个hidden类型的input,纯粹只是为了对应而已,没什么其他目的。


    c.我实在对web控件了解不多,一步步学,不知道大家有没有遇到过我这样的问题。

希望高手能够指点一下感激不尽!


本文地址:http://com.8s8s.com/it/it41953.htm