Проверка страницы, кнопка «Отправить» не является частью usercontrol - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть несколько полей для проверки на сервере (CustomValidator), который находится в отдельном пользовательском элементе управления, и моя кнопка «Отправить» находится на странице, не находящейся в пользовательском элементе управления.

Я сделал следующее:поместил все мои методы проверки в код позади моего usercontrol (ascx.cs), а проверка страницы в коде позади страницы (aspx.cs).Я положил их в том же ValidationGroupName (поля и кнопка «Отправить»).usercontrol (ascx) является дочерним элементом моей страницы (aspx).Я уже поместил CauseValidation="true" на мою кнопку и UseSubmitBehavior="true".Проблема в том, что она не проверяется.В чем может быть проблема в этом?

Примечание: Я не могу поместить кнопку как часть пользовательского контроля.

Редактировать:

inмоя страница aspx, событие нажатия кнопки имеет this.Page.Validate(ValidationGroupName), и все мои валидаторы находятся в полях отдельного элемента управления (ascx), который является дочерним элементом страницы aspx.

protected void Button1_Command(object sender, CommandEventArgs e)
{
    if(e.CommandName.Equals("Validate", StringComparison.Ordinal))
    {
        this.Page.Validate("MyValidationGroup");
        if(this.Page.IsValid)
        {
            // I'll change my View here.
        }
    }
}

Моя кнопка выглядиткак

<asp:Button ID="Button1" runat="server" UseSubmitBehavior="true" CommandName="Validate" 
                    Text="Submit" OnCommand="Button1_Command" CausesValidation="true" ValidationGroup="MyValidationGroup" />

Приведенный выше фрагмент находится на моей странице aspx.

Я пытался поставить ту же кнопку на странице ascx, она работает нормально.Моя мысль так как страница ascx находится под страницей aspx.Когда происходит событие кнопки на странице aspx (Button1), остальная часть события на странице ascx не запускается.Я пытался поставить точки останова на события кнопки и события валидатора, если кнопка страницы (aspx) является той, которую я нажимаю, она не остановится на моих событиях валидатора, если кнопка на элементе управления (ascx) я нажмуон остановится на событиях валидатора.Что может быть средством от этого?

1 Ответ

2 голосов
/ 15 сентября 2010

Вы пытались позвонить ucName.Page.Validate(); в событии нажатия кнопки?

(где ucName - это то, что вы называли пользовательским элементом управления в разметке)

Редактировать: ОК, этот простой код, приведенный ниже, прекрасно работает для меня, единственный способ, которым я нарушил проверку, - установить для моего пользовательского элемента управления значение visible = false; Вы можете разместить больше своего кода?

Разметка родительской страницы:

<uc:ucTest id="ucName" runat="server">
<asp:Button ID="btnTest" runat="server" Text="Test validation" onclick="btnTest_Click" />

код позади:

protected void btnTest_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        Response.Write("Hi!");
    }
}

пользовательская разметка управления:

<asp:TextBox ID="txtDummy" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server" 
     ErrorMessage="*"
     ControlToValidate="txtDummy" 
     onservervalidate="CustomValidator1_ServerValidate">
</asp:CustomValidator>

код позади:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    if (txtDummy.Text.Length > 0)
    {
        args.IsValid = false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...