当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > web组件设计,利用接口(IPostBackDataHandler)产生数据回传的问题

ASP.NET
Check if a File is in Internet Explorers Cache
如何检测电脑是否安装了.net framework
[Regex]Greta不支持“Named Groups”特性
使用子類化的方法來實現VB對特殊消息的響應
C#软件启动设计
C#中虛函數,抽象,接口的簡單説明
TreeView的操作
InteliIM 3.0 will be released soon!
如何將 Visual Basic 與 ADO 搭配使用
建立永遠停留在最上層的窗口(VB)
C#中比较两个值型一维数组变量是否值相等
谈谈软件工程设计的艺术
批量添加Active Directory帐号
文件搜索的实现(深度搜索)
一个图形分割问题[答网友]
XML反串行化Namespace不统一而引起的错误
使用Javascript创建XML文件
突破MsComm控件RThreshold限制,全部数据统统收!
如何制作一个带启动屏幕的窗体
【翻译】Managed DirectX(第五章)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 65 ::
收藏到网摘: n/a

1.组件源文件 IPostTest.cs
1using System;2using System.Web.UI;3using System.Web.UI.WebControls;4using System.ComponentModel;56namespace MyWebControl7{8 /// 9 /// IPostTest 的摘要说明。10 /// 11 [DefaultProperty("Text"), 12 ToolboxData("<{0}:IPostTest runat=server>")]13 public class IPostTest : System.Web.UI.WebControls.WebControl,IPostBackDataHandler14 {15 private string user;16 private string pwd;17 18 // 控件名称设置19 private string UserName 20 {21 get22 {23 return this.UniqueID + ":user";24 }25 }2627 private string PwdName28 {29 get30 {31 return this.UniqueID + ":pwd";32 }33 }3435 // 公共属性36 public string UserValue37 {38 get39 {40 return user;41 }42 }4344 public string PwdValue45 {46 get47 {48 return pwd;49 }50 }5152 /// 53 /// 将此控件呈现给指定的输出参数。54 /// 55 ///
要写出到的 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);6263 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();//input6869 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 hidden7475 output.RenderBeginTag(HtmlTextWriterTag.Br);76 output.RenderEndTag();//br7778 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();//input8384 output.RenderEndTag();//td85 output.RenderEndTag();//tr86 output.RenderEndTag();//table87 }88 // IPostBackDataHandler 成员8990 void IPostBackDataHandler.RaisePostDataChangedEvent()91 {92 // TODO: 添加 IPostTest.RaisePostDataChangedEvent 实现93 }9495 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 }102103 }104}105




2.测试方法
将组件编译后添加入自定义控件工具栏,拖入到测试页面,增加一button按钮控件,


3.得出结论
当组件内部存在多个input子控件时,必须有一个子控件的 name 为 this.UniqueID,这样才能取得其他子控件的值回传。
a.当我试着将this.UniqueID加载到table上时,却取不到其子控件input的值。
b.上面的类型为hidden的input,可以取消,但必须将this.UniqueID加载到另外的任意一个控件上,否则取不到其值。
我这么加一个hidden类型的input,纯粹只是为了对应而已,没什么其他目的。


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

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