Элементы управления динамической проверки не работают в панели обновления - PullRequest
0 голосов
/ 07 августа 2009

Я динамически создаю элементы управления проверкой и добавляю их на панель обновлений. Однако проверка на стороне клиента никогда не запускается.

Вот файл aspx:

<div>
    <asp:UpdatePanel ID="UpdatePanel1"  UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
    </ContentTemplate>
    <Triggers >
        <asp:AsyncPostBackTrigger ControlID ="Button1" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

<asp:Button ID="Button1" runat="server" Text="Button"  CausesValidation="true"/>


</div>

Вот код:

Dim Survey As New Survey
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Survey.RenderPage(PlaceHolder1)
End Sub

Вот класс, который создает элемент управления проверкой:

Public Class Survey

    Public Sub RenderPage(ByVal PlaceHolder As PlaceHolder)

        Dim textbox As New TextBox
        textbox.ID = "testing"
        PlaceHolder.Controls.Add(textbox)

        Dim val As New RequiredFieldValidator
        val.ControlToValidate = textbox.ID
        val.Text = "required"
        val.EnableClientScript = True
        PlaceHolder.Controls.Add(val)

    End Sub
End Class

Когда вы нажимаете следующее, проверка на стороне клиента никогда не запускается. Что действительно странно, так это то, что когда вы оборачиваете кнопку внутри другой панели обновлений, проверка запускается (в IE и Firefox, но не в Chrome или Safari).

У кого-нибудь есть идеи, что происходит? Я знаю, что первые версии Asp.net AJAX не поддерживали элементы управления проверкой, но с моей стороны все в порядке.

1 Ответ

0 голосов
/ 07 августа 2009

вижу там 2 проблемы

  1. Когда панель обновления вызывает асинхронную запись обратно на сервер, она не может создать дерево элементов управления с вашими динамическими элементами управления, поэтому убедитесь, что вы вызываете RenderPage из Page_Load для ScriptManager.IsInAsyncPostBack == true
  2. Существует проблема использования валидаторов под панелью обновлений - скрипты должны быть загружены до работы панели обновлений. Я могу предложить вам выделить фиктивный RequiredFieldValidator под UpdatePanel. Установите их Display = none (но не Visible = false !!!) или поместите в несуществующее ValidationGroup. Это позволяет рендерить JScript на вашу страницу.
...