技术开发 频道

有关注册DataItem的一些可能被忽视的事情

IT168技术文档】   

    这是一个很常见的使用场景,尤其是出现了UpdatePanel之后:页面中有一排菜单,点击菜单中的每一项,都会使某个UpdatePanel中出现不同的控制面板。在开发时,往往会将每个的控制面板写成不同的用户控件,点击菜单时事实上就是在UpdatePanel中放入不同的用户控件。

    如果要开发这样的功能,从理论上来说并不困难,但是如果要能够在控件之间灵活切换,甚至要从控件A的某个操作中切换到控件B,可能就需要增加控件之间的耦合度了。因此,如何控制这样的切换似乎需要细细考虑一下。

    在这里,我选择使用一个第三方的控件来进行统一处理,这个控件就是SwitchPartManager。在了解这个控件的实现之前,我们先来看一下一个简单的使用示例吧。

   使用效果

   
首先,在页面中,会使用两个按钮在两个用户控件之间进行切换。在SwitchPartManager的PlaceHolderUpdatePanelID属性指定了作为容器的UpdatePanel,而点击不同的按钮,则会调用ScriptManager的SwitchTo方法切换至不同的控件。如下:

Default.aspx
<jeffz:SwitchPartManager ID="SwitchPartManager1" runat="server"
PlaceHolderUpdatePanelID="UpdatePanel1" />
<asp:Button ID="ButtonA" runat="server" Text="ControlA" OnClick="ButtonA_Click" />
<asp:Button ID="ButtonB" runat="server" Text="ControlB" OnClick="ButtonB_Click" />
<hr />
<asp:UpdatePanel ID="UpdatePanel1" runat="server"></asp:UpdatePanel>
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
ScriptManager sm = ScriptManager.GetCurrent(this);
sm.RegisterAsyncPostBackControl(this.ButtonA);
sm.RegisterAsyncPostBackControl(this.ButtonB);
}
protected void ButtonA_Click(object sender, EventArgs e)
{
SwitchPartManager.GetCurrent(this).SwitchTo("ControlA");
}
protected void ButtonB_Click(object sender, EventArgs e)
{
SwitchPartManager.GetCurrent(this).SwitchTo("ControlB");
}

    在ControlA中有一个按钮,点击它之后将会切换到ControlB。如下:

ControlA.ascx
This is Control A.
<asp:LinkButton ID="LinkButton1" runat="server"
OnClick="LinkButton1_Click">Switch To Control B</asp:LinkButton>
ControlA.ascx.cs
protected void LinkButton1_Click(object sender, EventArgs e)
{
SwitchPartManager.GetCurrent(this.Page).SwitchTo("ControlB");
}
    而在ControlB中,它自身含有一个UpdatePanel和一个按钮,点击按钮则可以刷新时间:

ControlB.ascx
This is Control B
<br />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<%= DateTime.Now %>
<asp:Button ID="Button1" runat="server" Text="Refresh Time" />
</ContentTemplate>
</asp:UpdatePanel>

    编写代码,控件之间的切换都是非常的容易。大家可以点击这里查看使用效果。

0
相关文章