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

ASP.NET
[EnterpriseServices]利用assembly定义我们的组件在COM+中的注册方式
crystal reports for Visual Studio .NET(webformsample)
XML指南:微软的XML解析器
展现C# 清单5.10 生成exe文件执行的问题
vb.net 读写xml方法(1)
选择文件夹的对话框控件c#
特洛伊木马服务器源代码(C#)
上传图片画带阴影的水印.(C#)
vb.net读写xml(2)--实现datagrid与xml的沟通(原创)
列出所有的sheet,然后点击其中的一个,自动跳过去
从VB中的Datagride中向excel导入数据
XML指南:XML CDATA
XML指南:XML编码
XMLDOM对象方法:Document对象方法
XMLDOM对象方法:对象事件
XMLDOM对象方法:对象属性
[一个登录窗体的完整范例,包括登录,密码更改,输入错误三次退出]
[关于判断输入数据是否在数据库中的方法。]
[VBA]office中内建的faceid所对应的图标
web组件设计,利用接口(IPostBackDataHandler)产生数据回传的问题

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


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

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