这几天,做新的项目。部门经理要统一界面风格。在原来的DataGrid上面重新做一个自定义的分页控件,代码是参考陕北吴旗桂,只是在功能上面没有那么强大,
做完后,界面如下:没有办法上传图片上来。
只是在吴的基础上,用DropDrowList代替了多个页的点击,在事件的处理上面,本来是在服务器端输出
writer.AddAttribute(HtmlTextWriterAttribute.Id,"Pager_Select");
writer.AddAttribute(HtmlTextWriterAttribute.Onchange,"javascript:__doPostBack('"+this.ID+"',this.value);");
writer.RenderBeginTag(HtmlTextWriterTag.Select);
可是把自定义控件拖到用户控件上面的时候,事件就已经丢失了,为什么了,因为用户控件的ID在页面是以这样一个形式用户控件$控件ID。
反编译微软的代码,发现微软在Page的GetPostBackEventReference的方法中
用私有的inOnFormRender来判断是否在Page页面上
if (this._inOnFormRender)
{
textArray1 = new string[5] { "__doPostBack('", control.UniqueIDWithDollars, "','", Util.QuoteJScriptString(argument), "')" } ;
return string.Concat(textArray1);
}
textArray1 = new string[5] { "__doPostBack('", control.UniqueID, "','", Util.QuoteJScriptString
可惜这个方法是没有办法外部来调用的
最后采用了一个折中的办法,还是用传统的
writer.AddAttribute(HtmlTextWriterAttribute.Onchange,Page."GetPostBackClientHyperlink(this,'this.value').replace('this.value',this.value));
替换