Nano Hash - криптовалюты, майнинг, программирование

ASP:флажок Autopostback после изменения, когда значение уже было изменено с помощью Javascript

У меня есть страница ASP.NET с флажком и парой текстовых полей.

Когда пользователь снимает флажок, мне нужно выполнить серию проверок и сообщить пользователю результат. Я делаю эти проверки на постбэке через свойство autopostback флажка:

<asp:CheckBox ID="chkDecision" runat="server" AutoPostBack="true" />

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

<asp:TextBox ID="txtLeft" runat="server" CssClass="textboxstandard" MaxLength="50" onkeyDown="SelectDecision(event);">

function SelectDecision(e) {
        if (!checkSpecialKeys(e)) {
            var chkDec = $get('<%=chkDecision.ClientID %>');
            if (!chkDec.checked) {
                chkDec.checked = true;
            }                
        }
    }

Все вышеперечисленное работает нормально.

У меня проблема в том, что когда пользователь начинает вводить текст в поле, флажок ставится. Если они затем вручную снимут флажок, обратная передача не сработает.

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

Как я могу выполнить проверки на стороне сервера, упомянутые в приведенном выше сценарии?

Завершение Благодаря приведенной ниже помощи я смог самостоятельно продвинуться дальше во время тестирования предоставленных ответов. Я обнаружил, что могу установить атрибут AutoPostBack в текстовых полях:

<asp:TextBox ID="txtLeft" runat="server" CssClass="textboxstandard" MaxLength="50" onkeyDown="SelectDecision(event);" AutoPostBack="true"></asp:TextBox>

В моем сценарии, достигнув того же, что и ниже, я обнаружил, что это более удобно, поскольку обратная передача происходит после завершения редактирования. Спасибо за вашу помощь!


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

Ответы:


1

сервер не будет понимать изменения на стороне клиента. вы можете написать javascript для события checkedchange.

вы должны сделать следующее: эта функция устанавливает и снимает флажок и запускает автопостбэк на стороне сервера.

<script type="text/javascript"> 
        function SelectDecision() { 


            var chkDec = $get('<%=chkDecision.ClientID %>');                  

            //For checking or unchecking the checkbox. 
            if (chkDec .checked) { 
                chkDec .checked = false; 
            } 
            else { 
                chkDec .checked = true; 
            } 


            //For firing the click event. 
            if (document.createEventObject) { 
                // dispatch for IE 
                var evt = document.createEventObject(); 
                return element.fireEvent('on' + 'click', evt) 
            } 
            else { 
                // dispatch for firefox + others 
                var evt = document.createEvent("HTMLEvents"); 
                evt.initEvent('click', true, true); // event type,bubbling,cancelable 
                return !element.dispatchEvent(evt); 
            } 
        } 
    </script>

подробнее: http://forums.asp.net/t/1445241.aspx/1/10

28.09.2012
  • Этот код активации события работал лучше, чем простой вызов __doPostBack. (по крайней мере в IE). Чтобы помочь будущим искателям, в коде события следует использовать «chkdec» вместо «element». «элемент» выдаст ошибку «Javascript не определен». Это сохранило введенный символ, но закрывает редактирование в текстовом поле, поэтому вам необходимо сбросить фокус (с учетом введенного символа при обработке обратной передачи. 01.10.2012

  • 2

    Вы можете использовать:

    function SelectDecision(e) {
        if (!checkSpecialKeys(e)) {
            var chkDec = $get('<%=chkDecision.ClientID %>');
            if (!chkDec.checked) {
                chkDec.checked = true;
                __doPostBack('<%=chkDecision.ClientID %>', '');
            }                
        }
    }
    
    28.09.2012
  • Я получаю сообщение об ошибке javascript SCRIPT5007: значение свойства '__postback' равно null или не определено, а не объект Function с этим решением. Вместо этого __postback должен быть __doPostBack, и он сработает. В отличие от ответа Праная, этот привел к исчезновению символа, введенного в соответствующее текстовое поле. 01.10.2012
  • Конечно, я забыл написать имя функции. 01.10.2012
  • Ответ Pranay содержит много ненужных вещей, таких как проверка типа просмотра и повышение события. Когда событие возникает, функция doPostBack все равно будет вызываться. Зачем вам ненужные вещи? 01.10.2012
  • Я упомянул название функции только для того, чтобы помочь будущим искателям, которые случайно наткнутся на этот пост. Как я упоминал в своем комментарии выше, простой прямой вызов обратной передачи означал, что первый введенный символ был потерян из текстового поля. Этого не произошло с использованием ответа Праная. Это единственная причина, по которой я отметил его как ответ. Спасибо за помощь! Я очень ценю это! :) 02.10.2012
  • Новые материалы

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

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

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