Избегайте обратной передачи при нажатии кнопки - PullRequest
0 голосов
/ 31 августа 2011

У меня есть функция поиска. если строка поиска пуста, и пользователь нажимает «GO», обратная передача gridview не должна происходить, и предупреждение (как упомянуто в приведенном ниже коде) должно срабатывать.

Мое gridview находится в панели обновления. Ниже приведена логика, которую я написал, но она не работает.

 protected void btnGo_Click(object sender, EventArgs e)
        {
            if (!txtSearchString.Text.Equals(string.Empty))
            {
                BinGrid();
                upnl1.update //update panel is updated here.
            }
            else
            {
                ScriptManager.RegisterStartupScript(this.upnl1, this.GetType(), "Search", "alert('Enter search text');", false);
                //upnlgvOpportinities.Update();
                //upnlAdmin.Update();
                return;
            }
        }

Пожалуйста, помогите! Дайте мне знать, нужна ли какая-либо информация

Ответы [ 4 ]

4 голосов
/ 31 августа 2011

Эта логика неверна.Следует избегать использования javascript, если вы хотите избежать постбэка на первом месте.

Пусть ваш javascript вернет false, когда текстовое поле пусто, и true, если нет

<asp:button runat="server".... OnClientClick="return myfunction(); " />

Вы можете проверить, является ли текстовое поле пустым или нет в myfunction()

2 голосов
/ 31 августа 2011

Если вы не хотите, чтобы запрос на сервер отправлялся (если я правильно понял ваши потребности), тогда вам нужно решение на стороне клиента, то есть обработать нажатие кнопки с помощью JavaScript и условно предотвратить обратную передачу.Однако ваш текущий код на стороне сервера и выполняется на сервере после обратной передачи.

Что касается стороны клиента, здесь возможен один способ.Определите функцию js, которая просто проверяет значение поля поиска и возвращает false, если оно пустое.По нажатию кнопки просто вызовите эту функцию.Если обработчик щелчка возвращает false, дальнейшая обработка щелчка кнопки будет остановлена ​​и обратная передача не произойдет:

function checkSearch() {
    var searchBox = document.getElementById('HereComesSearchBoxClientID');

    if (searchBox.value == '') {
        alert('Enter search text');
        return false;
    } else {
        return true;
    }
}

<asp:Button ID="SearchButton" runat="server" Text="GO" OnClick="ServerSideHandler" OnClientClick="checkSearch();" />
1 голос
/ 31 августа 2011

Замените строку ScriptManager следующей строкой кода.

ScriptManager.RegisterStartupScript(this.upnl1, this.GetType(), "Script", "alert('Enter search text');", true);
0 голосов
/ 01 сентября 2011

@ Путь Мадхура Ахаджи правильный.Расширение это немного больше.

HTML

<asp:Button ID="txtSearchString" runat="server" 
        OnClientClick="javascript:return CheckifEmpty(this);" />

Javascript

function CheckifEmpty(objSearchBox) {
    //always trim, otherwise it will accept a string of spaces
    var isEmpty = objSearchBox.value.trim() == "";
    if (isEmpty) {
        alert('Enter search text');
    }
    return !isEmpty;
}
if (!String.prototype.trim) {
    String.prototype.trim = function() {
        return this.replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, "$1");
    };
}
...