Выполнить серверную часть со стороны клиента

#javascript #asp.net

#javascript #asp.net

Вопрос:

Я хочу выполнить событие добавления нажатия кнопки (на стороне сервера) со стороны клиента.

Это моя функция javascript

   function validateinput() {
    var arrTextBox = document.getElementsByTagName("input");
     var retVal = 1;
    for (i = 0; i < arrTextBox.length; i  ) {
        if (arrTextBox[i].type == "text"  amp;amp; arrTextBox[i].value == "") {
            retVal = 0;

        }
    }


    if (retVal == 0) {
        alert("Validation Failed");
        return false;
    }
    else {
        alert("Validation Success");
        return true;
        __doPostBack(btnAddItem);

    }

}
  

Я вызываю серверный код только тогда, когда alert («Проверка прошла успешно») и возвращает true.

Это мой серверный код

     protected void Page_Load(object sender, EventArgs e)
    {
        txtbox1.Attributes.Add("onkeydown", "if(event.keyCode) {if  (event.keyCode > 57 amp;amp; event.keyCode <= 90)  return false; } else {return true};");
        if (!IsPostBack)
        {
            //The code is too big to be posted
        }
    }

    protected void btnAddItem_Click(object sender, EventArgs e)
    {
        if (IsValidPost())
        {
            if (btnAddItem.Text == "Add Item  ")
            {
                if (textbox1.text== "")
                {
                    Addtogrid();
                }
            }
        }
    }
  

Правильно ли я это делаю? поскольку я не получаю ожидаемых результатов. Также я получаю сообщение об ошибке на странице.GetPostBackEventReference(btnAddItem); рекомендуется использовать ClientScript . Когда я пытаюсь использовать ClientScript.GetPostBackEventReference(btnAddItem); выдает ошибку, указывающую, что ClientScript не распознан.

Пожалуйста, помогите

Ответ №1:

Событие onclick объекта asp:button вызовет проверку клиента, если вы настроили его с помощью элемента управления validtion. Если вы не настроили событие onclick для кнопки, он не будет знать, какой метод вызывать. Если вы настроили onclick, то вызов javascript не требуется. Если вы настроили элемент управления проверкой на использование сценария проверки и проверки на стороне клиента, .net обработает обратный вызов. И, глядя на ваш скрипт, вам может быть удобнее использовать средство проверки обязательных полей, чем ваш пользовательский скрипт.

Комментарии:

1. Спасибо за ваш ответ. Можете ли вы помочь мне в получении желаемых результатов?

2. Требуемый элемент управления проверки полей имеет встроенную функциональность, которую вы хотите. вам просто нужно добавить RequiredFieldValidator для каждого из ваших текстовых полей, которые вы хотите запросить. Если это происходит динамично при загрузке страницы, вы можете добавить по одному для каждого и включить / отключить их в вашем событии загрузки страницы / привязки данных. Asp.net кнопки по умолчанию вызывают проверку.

Ответ №2:

Вы уверены, что вам нужен код GetPostBackEventReference в методе загрузки страницы? _doPostBack() ссылается не на целевой объект, а только на имя.

Редактировать: Почему вы вызываете return true перед вызовом _doPostBack()?

Редактировать 2: Есть 2 способа вызвать GetPostBackEventReference, 1) из вашего .Здесь ЧИСТЫЙ код, но это устаревший метод, и рекомендуется использовать версию скрипта на стороне клиента, 2) из вашего скрипта на стороне клиента здесь. Я не могу сказать, какой метод вы используете, потому что вы не опубликовали код загрузки страницы. Я не вижу причин вызывать это на основе другого опубликованного вами кода. Вызов _doPostBack() может выполняться без получения обратной ссылки post для элемента управления.

Удалите вызов GetPostBackEventReference и измените свой javascript, чтобы он выглядел следующим образом:

 function validateinput() {
    var arrTextBox = document.getElementsByTagName("input");
    var ddlTextBox = document.getElementsByTagName("select");
    var retVal = 1;
    for (i = 0; i < arrTextBox.length; i  ) {
        if (arrTextBox[i].type == "text" amp;amp; arrTextBox[i].getAttribute("IsMandatory") == "Y" amp;amp; arrTextBox[i].value == "") {
            retVal = 0;
        }
    }

    if (retVal == 0) {
        alert("Validation Failed");
        return false;
    }
    else {
        alert("Validation Success");
        __doPostBack('btnAddItem', '');
        return true; // This shouldn't be needed but it does need to come after _doPostBack()
    }
}
  

Правка 3: Попробуйте следующий код для кнопки:

 <asp:Button ID="btnAddItem" runat="server" onclick="btnAddItem_Click" OnClientClick ="javascript:validateinput(); return false;" Text="Add Item  " Width="85px" />
  

Код OnClientClick должен возвращать false, если вы не хотите, чтобы он отправлялся обратно в форму. Даже если вы вернете false из вызванного метода JavaScript, он все равно отправит ответ. Для меня это никогда не имело смысла, но я узнал об этом, неоднократно сталкиваясь с одной и той же проблемой.

Комментарии:

1. @Крис, я совершенно не понял первую строку в твоем ответе. Можете ли вы помочь мне понять это с помощью кода, если это возможно?

2. @Chris, я попробовал приведенный выше код и вставил свой метод загрузки страницы, но если проверка завершается неудачей, окно предупреждения не отображается.

3. Можете ли вы опубликовать весь свой код? Трудно понять, что вы делаете с этими блоками кода.

4. @jackey, отображается ли сообщение об успешном завершении или оно завершается сбоем до того, как попадет в блок if? Что вызывает ValidateInput()?

5. <asp: Идентификатор кнопки =»btnAddItem» runat =»server» onclick=»btnAddItem_Click» OnClientClick =»javascript:validateinput();» Text =»Добавить элемент » Width =»85px» /> Я использую это для вызова validateinput, и даже если проверка завершается неудачей, код на стороне сервера выполняется. Если проверка прошла успешно, отображается сообщение об успешном выполнении, но код не выполняется…