2013-09-04 4 views
0

Очень новая разработка ASP.Net, поэтому надейтесь, что это не слишком глупый вопрос.DetailsView paging включен/вызывает обратную передачу, когда текстовое поле, используемое для поиска, имеет недопустимый контент, а на стороне клиента отображается ошибка

У меня есть веб-страница (фреймворк 3.5) с элементом управления DetailsView, который привязан к sql и читает записи через хранимую процедуру. AllowPaging = true для элемента управления, поскольку может быть найдено более одной записи.

Он использует текстовое поле управления - значение, введенное пользователем - для перехода к SP.

В текстовом поле имеется элемент управления регулярным выражением, который подчеркивает, когда ввод недействителен.

Я делаю следующим образом:

  1. введите действительные данные в текстовом поле и нажмите «Enter» - записи найдены так DetailsView показывает мне первые записи плюс цифровые кнопки пейджинга (правильные)
  2. изменить значение в текстовом поле на что-то недействительное и вывести из текстового поля - проверка правильности подсвечивает ошибку (правильно)
  3. нажмите 'enter' - ничего не происходит, недействительно (правильно)
  4. нажмите на одну из пронумерованных кнопок поискового вызова в DetailsView - происходит обратная передача. Контроль проверки не помешал пейджингу. Я хотел бы предотвратить любую обратную связь/ответ, кроме того, чтобы заставить пользователя исправить недопустимые данные в текстовом поле.

Уверен, что должен быть простой способ справиться с этим и попробовал различные варианты, но не попал туда. Спасибо заранее.

+0

Вы можете разместить разметку для управления проверки, а также текстовые поля? – afzalulh

+1

Сделать собственность detailview - CauseValidation true –

ответ

1

В основном здесь валидация не происходит, когда вы нажимаете на любые пронумерованные кнопки поискового вызова DetailsView.

Для предотвращения полной обратной передачи требуется проверка страницы для проверки на стороне клиента. Также , чтобы сделать проверку на стороне сервера, звоните Page.Validate() в PageIndexChanging event of DetailsView. Если страница не действительна, предотвратите пейджинг.

ПРИМЕЧАНИЕ I: Вы также можете позвонить по телефону Page.Validate() внутри Page_Load. Нет необходимости, чтобы вы вызывали это событие только в событии DetailsView.PageIndexChanging.

ПРИМЕЧАНИЕ II: в случае, если вы просто хотите предотвратить возникновение пейджинга и не хотите использовать PagerTemplates, используйте проверку на стороне сервера. Откат всегда будет иметь место, хотя, если страница не действительна, пейджинг не произойдет.

Начните с использования <PagerTemplates> для подкачки в DetailsView и установите для атрибута CausesValidation значение true для кнопок пейджера. Настройки ниже CommandName & CommandArgument автоматически позаботится о вашем пейджинге. See MSDN.

<pagertemplate> 
<asp:LinkButton id="PreviousButton" 
        text=" Previous_" 
        CommandName="Page" 
        CommandArgument="Prev" CausesValidation="true" 
        runat="Server"/> 
<asp:LinkButton id="NextButton" 
        text="Next_" 
        CommandName="Page" 
        CommandArgument="Next" CausesValidation="true" 
        runat="Server"/> 
</pagertemplate> 

Разметка DetailsView:

<asp:DetailsView runat="server" ID="EmpDetails" 
    OnPageIndexChanging="EmpDetails_PageIndexChanging" ... /> 

Event Handler

protected void EmpDetails_PageIndexChanging(object sender, DetailsViewPageEventArgs e) 
    { 
     Page.Validate(); 
     if (!Page.IsValid) 
      e.Cancel = true;// Prevent the paging 

    }