Как вызвать RequiredFieldValidator на клиенте перед обратной передачей - PullRequest
6 голосов
/ 22 марта 2010

Я унаследовал некоторый код, который разбивает страницу на вкладки, используя div. На первой странице есть много обязательных валидаторов полей и регулярных выражений. Проблема в том, что пользователь может переключиться на другую вкладку, вызвать обратную передачу и завершить проверку на первой странице, оставив вещи в беспорядке.

То, что я хочу сделать, - это выполнить проверку на первой странице, когда пользователь выбирает другую вкладку, тем самым предотвращая переход на новую вкладку до тех пор, пока первая страница не станет действительной.

<ul>                        
     <li><a href="#tab1">Tab 1</a> </li>
     <li><a href="#tab2" onclick="return isValid();">Tab 2</a></li> 
     <li><a href="#tab3" onclick="return isValid();">Tab 3</a></li> 
</ul>

Где isValid нужно запустить валидаторы.

Спасибо!

ОБНОВЛЕНИЕ: Ответ, предоставленный codeka, довольно близок, однако, поскольку мне нужно предоставить атрибуты href и onclick (чтобы избежать путаницы в отображении), переключатель табуляции (привязки) все еще выполняется даже если проверка не пройдена. Вот как я это решил. Отказ от ответственности: ужасный код впереди

<ul>                        
    <li><a id="tab1Tab" href="#tab1" style="display:none"/><a onclick="isValid('tab1');">Tab 1</a></li>
    <li><a id="tab2Tab" href="#tab2" style="display:none"/><a onclick="isValid('tab2');">Tab 2</a></li>
    <li><a id="tab3Tab" href="#tab3" style="display:none"/><a onclick="isValid('tab3');">Tab 3</a></li>
</ul>

function isValid(tab) {
    var valid = Page_ClientValidate();
    var tabId = (valid ? tab : "tab1") + "Tab";
    $("#" + tabId).click();
}

Обратите внимание на использование jQuery для кросс-браузерной совместимости с событием click. И это работает, только если на других вкладках нет валидаторов, согласно ответу Томаса, мне нужно будет использовать группы валидации и дополнительную логику в isValid, если таковые будут добавлены.

Ответы [ 2 ]

2 голосов
/ 22 марта 2010

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

function TabValidate( tabName ) {
    if ( Page_ClientValidate( tabName ) ) {
        //do stuff
    }
}

ДОПОЛНЕНИЕ Я упомянул об этом в комментарии, но решил, что добавлю его в свой пост. Если на других вкладках нет других валидаторов, то другим решением будет просто пометить другие элементы управления .NET на других вкладках, которые могут инициировать обратную передачу с CausesValidation = "false" (например, DropDownLists с AutoPostBack = "true")

2 голосов
/ 22 марта 2010

ASP.NET создает глобальную функцию javascript Page_ClientValidate, которую вы можете вызвать для запуска валидаторов:

function isValid() {
    return Page_ClientValidate();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...