将多个用户控件嵌入到页面中?

时间:2010-12-13 20:52:37

标签: asp.net

我已将多个用户控件嵌入到同一页面中。用户控件通常具有2个不同的视图,编辑/默认视图和完成的视图。当用户完成编辑时,我将MultiView切换到完成状态。这种模式在页面中可以正常工作。

问题是当我回到主视图/页面然后用户带回控件时,视图仍处于完成状态。

有哪些简单方法可以重置/修正多视图状态?我可以在每个控件上都有一个Reset()函数,但感觉我可以避免这种情况。

更新

此页面旨在显示帐户/个人资料视图,其中包含以下部分:

<asp:MultiView>
...read only view 
<asp:EmailEditView>
<asp:AccountEditView>

等。

然后每个视图都有一个用户控件。在用户控件中,我们有类似的东西

<asp:multiview>
<asp:view id="edit"/>
<asp:view id="completed"/>

我发现这个设计存在以下问题:

  1. 当用户完成用户控制操作(例如更改电子邮件)时。即使第二次返回时,视图仍处于完成状态。

  2. 当用户返回原始表单时,数据是陈旧的。这种设计确实与回发机制有关。如果我不在主表单上使用!IsPostBack进行数据绑定,那么子表单上的下拉列表将无效。但是,一旦我在主窗体上添加了!isPostBack,那么数据就会变得陈旧。

  3. 我可以为每个用户控件添加一个“reset”标志,并添加类似

    的内容
    if ((!IsPostback) || (reset) )
    

    以及重置视图。在另一种情况下,我可以添加一个事件处理程序,以便在用户单击“返回”时加载重新加载/绑定数据,即我将表单更改回来的位置。

1 个答案:

答案 0 :(得分:0)

我正在尝试重新设计问题的功能,同时消除用户控件的复杂性。到目前为止,这是我最好的猜测(如果我错了,请纠正我)

<asp:MultiView runat="server" ID="MainMultiView" ActiveViewIndex="0">
    <asp:View runat="server" ID="DefaultView">
        Default View
        <asp:Button runat="server" ID="EditEmailButton" Text="Edit Email" OnClick="EditEmailButton_Click" />
        <asp:Button runat="server" ID="EditAccountButton" Text="Edit Account" OnClick="EditAccountButton_Click" />
    </asp:View>
    <asp:View runat="server" ID="EmailView">
        <asp:MultiView runat="server" ID="EmailMultiView" ActiveViewIndex="0">
            <asp:View runat="server" ID="EmailEditView">
                Edit Email
                <asp:Button runat="server" ID="SaveEmailButton" Text="Save" 
                    onclick="SaveEmailButton_Click" />
                <asp:Button runat="server" ID="CancelEmailButton" Text="Cancel" 
                    onclick="CancelEmailButton_Click" />
            </asp:View>
            <asp:View runat="server" ID="EmailCompleteView">
                Email Edit Complete!
            </asp:View>
        </asp:MultiView>
    </asp:View>
    <asp:View runat="server" ID="AccountView">
        <asp:MultiView runat="server" ID="AccountMultiView" ActiveViewIndex="0">
            <asp:View runat="server" ID="AccountEditView">
                Edit Account
                <asp:Button runat="server" ID="SaveAccountButton" Text="Save" 
                    onclick="SaveAccountButton_Click" />
                <asp:Button runat="server" ID="CancelAccountButton" Text="Cancel" 
                    onclick="CancelAccountButton_Click" />
            </asp:View>
            <asp:View runat="server" ID="AccountCompleteView">
                Account Edit Complete!
            </asp:View>
        </asp:MultiView>
    </asp:View>
</asp:MultiView>

- 背后的代码

protected void EditEmailButton_Click(object sender, EventArgs e)
{
    MainMultiView.SetActiveView(EmailView);
}

protected void EditAccountButton_Click(object sender, EventArgs e)
{
    MainMultiView.SetActiveView(AccountView);
}

protected void SaveEmailButton_Click(object sender, EventArgs e)
{
    // Save();
    EmailMultiView.SetActiveView(EmailCompleteView);
}

protected void CancelEmailButton_Click(object sender, EventArgs e)
{
    EmailMultiView.SetActiveView(EmailCompleteView);
}

protected void SaveAccountButton_Click(object sender, EventArgs e)
{
    // Save();
    AccountMultiView.SetActiveView(AccountCompleteView);
}

protected void CancelAccountButton_Click(object sender, EventArgs e)
{
    AccountMultiView.SetActiveView(AccountCompleteView);
}