在处理回传事件中,还需要考虑的因素就是事件参数和选项
传递回传事件参数
前面曾提到GetPostBackClientHyperlinkc(),可以为其提供一个可选参数,其在引发回传时从浏览器传到服务器,它的值传递到服务器的
RaisePostBackEvent()中,这里实现的功能类似于GridView的分页功能,单击时显示某一页数据
namespace HandlePostBack
{ //传递回传事件参数
public class HandlePostEventParamsControl : WebControl, IPostBackEventHandler
{
private string _controlToPage;
public string ControlToPage
{
get { return _controlToPage; }
set { _controlToPage = value; }
}
protected override void RenderContents(HtmlTextWriter writer)
{
GridView gridview = GetControlToPage();
for (int i = 0; i < gridview.PageCount; i++)
{
string eRef = Page.ClientScript.GetPostBackClientHyperlink(this, i.ToString());
writer.Write("[");
if (i == gridview.PageIndex)
{
writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold");
}
writer.AddAttribute(HtmlTextWriterAttribute.Href, eRef);
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write("{0}", i + 1);
writer.RenderEndTag();
writer.Write("] ");
}
}
private GridView GetControlToPage()
{
if (String.IsNullOrEmpty(_controlToPage))
{
throw new Exception("Must set control property");
}
return (GridView)Page.FindControl(_controlToPage);
}
public void RaisePostBackEvent(string eventArgument)
{
GridView gridview = GetControlToPage();
gridview.PageIndex = Int32.Parse(eventArgument);
}
} }
测试部分的主要代码
<div>
<handleps:HandlePostEventParamsControl ID="ParamsControl1" ControlToPage="GridView1" runat="server" />
<asp:GridView ID="GridView1" DataSourceID="SQL1" runat="server" AllowPaging="True" PageSize="2" PagerSettings-Visible="false">
asp:GridView>
div>当页面呈现在浏览器时,生成类似下面的链接
[]
[]
当单击页面时,关联的页面传回到服务器,RaisePostBackEvent()接受该页码并更改它关联的GridView所显示的分页
这里主要用到的类是PostBackOptions类,可以到MSDN上查看其属性。
//使用回传选项
public class HandlePostOpticesControl : WebControl
{
private string _Text;
public string Text
{
get { return _Text; }
set { _Text = value; }
}
private string _PostBackUrl;
public string PostBackUrl
{
get { return _PostBackUrl; }
set { _PostBackUrl = value; }
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
PostBackOptions ptions = new PostBackOptions(this);
options.ActionUrl = _PostBackUrl;
string eRef = Page.ClientScript.GetPostBackEventReference(options);
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, eRef);
writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
writer.AddAttribute(HtmlTextWriterAttribute.Type, "checkbox");
base.AddAttributesToRender(writer);
}
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Input;
}
}
protected override void RenderContents(HtmlTextWriter writer)
{
if (!String.IsNullOrEmpty(_Text))
{
writer.AddAttribute(HtmlTextWriterAttribute.For, this.ClientID);
writer.RenderBeginTag(HtmlTextWriterTag.Label);
writer.Write(_Text);
writer.RenderEndTag();
}
}
}
这个控件可以用来支持跨页提交,当控件被单击时,表单被提交到PostBackUrl所指定的页面,在 AddAttributesToRender()中,创建了PostBackOptions类的实例,其用于修改ActionUrl以支持跨页提交,该实 例传递给GetPostBackEventReference(),生成用于引发回发的JS
演示部分的关键代码
<handleps:HandlePostOpticesControl ID="PostOpticesControl1" runat="server" Text="高级选项" PostBackUrl="TestStateControl.aspx" />
<asp:TextBox ID="TextBox2" runat="server">asp:TextBox>
本文参考了《ASP.NET 3.5揭秘 (卷2)》
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25284529/viewspace-684569/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25284529/viewspace-684569/