首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

IPostBackDataHandler?解决思路

2012-03-18 
IPostBackDataHandler?我想要实现一个自定义控件,不继承自某一个带有回送的webcontrol,同时有自己的属性:S

IPostBackDataHandler?
我想要实现一个自定义控件,不继承自某一个带有回送的webcontrol,同时有自己的属性:SelectID。
页面调用
<MyNameSpace:MyControl   runat= "server "   ID= "MyControl1 "     SkinName= "Skin1.ascx "   SelectID= '12 '> </MyNameSpace:MyControl>
正常
如果将控件放在repeater内
<asp:Repeater   ID= "DefaultList "   runat= "server "   >
                        <ItemTemplate>
                                                              <MyNameSpace:MyControl   runat= "server "   ID= "MyControl1 "     SkinName= "Skin1.ascx "   SelectID= ' <%#   DataBinder.Eval(Container.DataItem,   "SelectID ")   %> '> </MyNameSpace:MyControl>                         </ItemTemplate>        
                         
                </asp:Repeater>

就不正常,SelectID得不到值,看有大大说和IPostBackDataHandler有关,是否确实?如果确实,该如何实现这个回送接口。

[解决办法]
[Bindable(true)]public string SelectedID{ get {}set{}}
[解决办法]
楼上的Bindable特性是把SelectID设成可绑定的,这样才能在ItemTemplate里用Eval绑定,

[解决办法]
微软的例子
---------------------------------------------
using System;
using System.Web;
using System.Web.UI;
using System.Collections;
using System.Collections.Specialized;


namespace CustomWebFormsControls {

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name= "FullTrust ")]
public class MyTextBox: Control, IPostBackDataHandler {


public String Text {
get {
return (String) ViewState[ "Text "];
}

set {
ViewState[ "Text "] = value;
}
}


public event EventHandler TextChanged;


public virtual bool LoadPostData(string postDataKey,
NameValueCollection postCollection) {

String presentValue = Text;
String postedValue = postCollection[postDataKey];

if (presentValue == null || !presentValue.Equals(postedValue)) {
Text = postedValue;
return true;
}

return false;
}


public virtual void RaisePostDataChangedEvent() {
OnTextChanged(EventArgs.Empty);
}


protected virtual void OnTextChanged(EventArgs e) {
if (TextChanged != null)
TextChanged(this,e);
}


protected override void Render(HtmlTextWriter output) {
output.Write( " <INPUT type= text name = "+this.UniqueID
+ " value = " + this.Text + " > ");
}
}
}
[解决办法]


应该是可以的.1.检查数据库中有没有值.2.是不是已经给值了,但没有看到?

热点排行