在多个视图中重用ASP.NET控件

时间:2011-10-27 23:11:28

标签: asp.net webforms controls reusability

是否可以在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;

1 个答案:

答案 0 :(得分:1)

至少,您可以在代码隐藏中使用一个Label实例,并使用两个位置的占位符通过条件以编程方式将其添加到所需位置。

此外,您可以创建一个新的用户控件,并将覆盖Label的所有逻辑放在那里。您仍将拥有此控件的2个实例,但您将设计一次Label。