Программно остановить навигацию - PullRequest
0 голосов
/ 21 января 2009

В .NET (в частности, C #), как я могу остановить навигацию?

Ситуация: пользователь щелкнул ссылку и запустил событие _Click ().

Событие click вызывает метод save, который проверяет некоторую информацию. Если какая-либо информация не соответствует желаемому, мы хотим предотвратить возникновение остальной части события щелчка.

Встроенная проверка ASP.NET не будет работать в этом случае. Существует несколько различных способов заполнения форм (а форма создается из нескольких различных элементов управления, каждый из которых используется на нескольких страницах) в зависимости от исходного состояния данных. Например, если они нажимают эту форму в первый раз (и они никогда не добавляли какую-либо информацию, которую она содержит ранее), НИЧЕГО не требуется ... но если они заполняют что-либо, они должны заполнить (почти) все.

При такой условной логике в валидации легче просто наклеить (очистить) метки на странице и, при необходимости, заполнить их сообщениями валидации, чем использовать фактические валидаторы.

Наша проблема в том, что метод, который запускает Save (), затем перемещает пользователя на другую страницу.

Нет никакого возвращаемого значения, которое мы можем использовать, чтобы указать «остановить навигацию» ... так как я могу запустить метод, установить метки «ошибки», а затем предотвратить возврат вызова в стек (и посылку пользователя со страницы)?

Ответы [ 2 ]

1 голос
/ 21 января 2009

Вы можете использовать CustomValidator и обрабатывать событие ServerValidate для выполнения этой пользовательской проверки?

HTTP-запрос может быть завершен путем вызова Response.End (); Также звучит так, как будто вы должны просто запретить выполнение действия Redirect, если страница недействительна.

1 голос
/ 21 января 2009

Response.End ();

Звучит так, будто у вас есть какая-то логика спагетти. Вы хотите разбить свою проверку на метод, который, если он возвращает false, останавливает обработку Save и т. Д.

Я ожидаю, что ваш код будет выглядеть примерно так:

if (Validation())
{
    if (DoSaveFunction())
    {
         Response.Redirect("theNextPage.aspx");
    }
    else
    {
         lblWarning.Text = "Something went wrong saving the file";
    }
}
else
{
    lblWarning.Text = "Invalid inputs";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...