После отключения кнопки ее значение не было отправлено в контроллер - PullRequest
0 голосов
/ 17 августа 2011

У меня есть контроллер с такой проверкой

if (form["submit"].ToString() == "Continue")
{

}

и у меня есть кнопка, которая отправляет

<button name="submit" value="Continue">Continue</button>

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

$('form').submit(function () {
                if ($(this).valid()) {
                    $(':submit', this).attr('disabled', 'disabled');
                }
            });

Так что теперь я не получаю значение form["submit"] на контроллере.

Есть мысли, как мне это исправить?

Я хочу по-прежнему предотвращать второй щелчок, но могу получить значение form["submit"], отправленное на контроллер.

1 Ответ

1 голос
/ 17 августа 2011

Можете ли вы контролировать значение submit в скрытом поле в форме?Я не могу сказать, какая другая логика вам может понадобиться, но когда форма отображается, вы можете установить значение скрытого поля в значение кнопки отправки и изменить его при необходимости, используя первый скрипт ниже.Пока у него есть атрибут name и он включен (что вы редко отключаете скрытое поле), он будет публиковаться при отправке формы.

$(function() {
    // this assumes your button has id="myButton" attribute
    $(':hidden[name="submit"]').val($('#myButton').val());
});

И, конечно, в вашей форме,вам понадобится скрытое поле с именем = "submit"

<input type="hidden" name="submit" value="Continue" />

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

Существуют также рамки, которые могут оказаться полезными для таких функций пользовательского интерфейса, как этот. KnockoutJS приходит на ум.Его можно использовать для «привязки» значений элементов ввода.Это, вероятно, излишне для этого небольшого примера, но может быть полезно, если ваш пользовательский интерфейс расширяется.Я добавил разметку, скрипт и комментарии ниже, если вам интересно.

$(function () {
    var viewModel = {
        submitValue: ko.observable("Continue")
    };

    ko.applyBindings(viewModel);

    $('form').submit(function() {
        if($(this).valid()) {
            // the following line will change the both the hidden field's value
            // as well as the button's value attribute
            viewModel.submitValue("some other value");

            // I couldn't follow your selector here, but please note I changed 
            // the name of the submit button in the markup below.
            $(':submit, this).attr('disabled', 'disabled');
        }
    });
});

KnockoutJS требует, чтобы вы использовали атрибут data-bind для настройки своих элементов.В вашем случае вы бы привязали одно свойство к нескольким элементам, например так:

<button name="submitButton" data-bind="value: submitValue"/>Continue</button>
<!-- and bind the same value similarly in the hidden field-->
<input type="hidden" name="submit" data-bind="value: submitValue"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...