Повторное использование ASP.NET Элементы управления в нескольких представлениях

#asp.net #webforms #controls #reusability

#asp.net #веб-формы #элементы управления #возможность повторного использования

Вопрос:

Возможно ли его повторное использование 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 Кодируйте со следующим.

 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
 

ВАУ!! : D ТАК СЧАСТЛИВ!! Ты даже не представляешь, сколько боли это мне причиняет: P

Примечание: я заметил, что он не очень хорошо поддерживает состояние, но это очень легко исправить по сравнению с переписыванием двойного кода>. <

Ответ №1:

По крайней мере, вы можете иметь один экземпляр Label в своем коде и добавить его программно в нужное место по условию, используя заполнители в обоих местах.

Кроме того, вы можете создать новый пользовательский элемент управления и поместить туда всю логику, которая покрывает вашу метку. У вас по-прежнему будет 2 экземпляра этого элемента управления, но вы создадите свой ярлык один раз.

Комментарии:

1. Но как можно заменить заполнитель на DropDownList , CheckBoxList , что у вас есть; вместе с соответствующими значениями / выборками и после этого ссылаться на идентификатор клиента системы управления версиями? На моей странице есть ДЕСЯТКИ элементов управления, и мне бы очень хотелось максимально снизить сложность моего веб-приложения.

2. ЕЛКИ-ПАЛКИ!! Это работает!! Я уже рассматривал этот заполнитель раньше, но понятия не имел, что он настолько прост в использовании, пока мне не посчастливилось найти другую статью, в которой это объяснялось простыми словами. О БОЖЕ!! Спасибо за подтверждение ответа для меня. Приветствия 🙂

3. @Chiramisu — не могли бы вы предоставить ссылку на статью, на которую вы ссылаетесь в своем комментарии, спасибо

4. @ChrisB Извини, Крис, я не знаю, на какую статью я ссылался, поскольку это было так давно, но я обновил свой вопрос, включив в него свою реализацию. Однако я отмечу, что это некоторые проблемы жизненного цикла страницы, которые необходимо преодолеть, чтобы они работали должным образом.