是否可以在MultiView中的多个视图中重用asp.net控件?我想为我的客户提供根据他们的偏好查看和输入表单作为ASP.NET向导或表单的选项。我的大部分研究都为MVC带来了无数的点击,但我使用的是WebForms,无论如何都无法找到明确的答案。
我的理论是这应该是可能的,但由于控件已经在页面的其他地方定义,我应该能够简单地告诉它在不同的位置重新显示相同的控件。
例如这样的事情:
<asp:MultiView ID="mv" runat="server" ActiveViewIndex="0">
<asp:View ID="WizardView" runat="server">
<asp:Wizard ID="wizzy" runat="server" ActiveStepIndex="0">
<WizardSteps>
<asp:WizardStep ID="WizardStep1" runat="server">
<!-- Wrapped in PlaceHolder goodness :P -->
<asp:PlaceHolder ID="wPH1" runat="server">
<asp:Label ID="MyLabel" runat="server" Text="Hello Stackies"></asp:Label>
</asp:PlaceHolder>
</asp:WizardStep>
</WizardSteps>
</asp:Wizard>
</asp:View>
<asp:View ID="FormView" runat="server">
<form action="#" method="post" id="wizzyform">
<!-- I WANT TO REUSE THIS CONTROL HERE -->
<asp:PlaceHolder ID="fPH1" runat="server"></asp:PlaceHolder>
</form>
</asp:View>
</asp:MultiView>
更新答案!!
我只是在我的标记中添加了一些PlaceHolder
,并使用以下内容在我的VB.NET Codebehind中创建了一个切换按钮。
Protected Sub ToggleView() Handles ViewToggleBtn.Click
If RequestWizard_mv.ActiveViewIndex = 0 Then
ViewToggleBtn.Text = "Toggle Wizard View"
RequestWizard_mv.ActiveViewIndex = 1
fPH1.Controls.Add(wPH1)
ElseIf RequestWizard_mv.ActiveViewIndex = 1 Then
ViewToggleBtn.Text = "Toggle Form View"
RequestWizard_mv.ActiveViewIndex = 0
wPH1.Controls.Add(fPH1)
End If
End Sub
WOOT !! :D SO HAPPY !!你不知道这给我带来了多少痛苦:P
注意:我注意到它不能很好地保持状态,但与重写双倍代码&gt;相比,超级简单的修复。&lt;
答案 0 :(得分:1)
至少,您可以在代码隐藏中使用一个Label实例,并使用两个位置的占位符通过条件以编程方式将其添加到所需位置。
此外,您可以创建一个新的用户控件,并将覆盖Label的所有逻辑放在那里。您仍将拥有此控件的2个实例,但您将设计一次Label。