我已将多个用户控件嵌入到同一页面中。用户控件通常具有2个不同的视图,编辑/默认视图和完成的视图。当用户完成编辑时,我将MultiView切换到完成状态。这种模式在页面中可以正常工作。
问题是当我回到主视图/页面然后用户带回控件时,视图仍处于完成状态。
有哪些简单方法可以重置/修正多视图状态?我可以在每个控件上都有一个Reset()函数,但感觉我可以避免这种情况。
更新
此页面旨在显示帐户/个人资料视图,其中包含以下部分:
<asp:MultiView>
...read only view
<asp:EmailEditView>
<asp:AccountEditView>
等。
然后每个视图都有一个用户控件。在用户控件中,我们有类似的东西
<asp:multiview>
<asp:view id="edit"/>
<asp:view id="completed"/>
我发现这个设计存在以下问题:
当用户完成用户控制操作(例如更改电子邮件)时。即使第二次返回时,视图仍处于完成状态。
当用户返回原始表单时,数据是陈旧的。这种设计确实与回发机制有关。如果我不在主表单上使用!IsPostBack进行数据绑定,那么子表单上的下拉列表将无效。但是,一旦我在主窗体上添加了!isPostBack,那么数据就会变得陈旧。
我可以为每个用户控件添加一个“reset”标志,并添加类似
的内容if ((!IsPostback) || (reset) )
以及重置视图。在另一种情况下,我可以添加一个事件处理程序,以便在用户单击“返回”时加载重新加载/绑定数据,即我将表单更改回来的位置。
答案 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);
}