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

ASP.NET
AspNetPager与Socut.Data使用实例代码
asp.net JavaScript插件 JavaScript Function Outliner
asp.net for循环语句
asp.net access添加返回自递增id的实现方法
asp.net SAF 中缓存服务的实现
asp.net小孔子cms中的数据添加修改
asp.net自定义控件代码学习笔记
用javascript css实现GridView行背景色交替、鼠标划过行变色,点击行变色选中
.net三层结构初探分析
asp.net+js实时奥运金牌榜代码
asp.net SqlHelper数据访问层的使用
asp.net中利用ashx实现图片防盗链的原理分析
asp.net 2.0多语言网站解决方法
Ajax.net Sys未定义错误解决办法
.dll 文件反编译的工具软件集合
asp.net gridview 72般绝技
常用的在数据库中建立无限级树形菜单的asp.net代码
asp.net生成静态页并分页+ubb
Asp.net 通用万级数据分页代码[修正下载地址]
较为全面的Asp.net提交验证方案分析 (上)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 140 ::
收藏到网摘: 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控件了解不多,一步步学,不知道大家有没有遇到过我这样的问题。

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